最適化に喰らいました!
デバッグ版で動作しているのに…
リリース版でハング?
と言うのは、たまに有る…。
今回のボケが喰らったのは
コンパイラの最適化による
ハングアップ…。
散々調べて結果がこれ…。
2642: switch( Index )
2643: {
004335AA jmp dword ptr [eax*4+4339E0h]
2644: case 0: Option.A = TRUE; break;
004335B1 mov dword ptr [Option+14h (0048a5f4)],1
004335BB jmp $L48839+0Ah (004335eb)
2645: case 1: Option.A = FALSE; break;
004335BD mov dword ptr [Option+14h (0048a5f4)],0
004335C7 jmp $L48839+0Ah (004335eb)
2646: case 2: Option.B = 0; break;
004335C9 mov dword ptr [Option+18h (0048a5f8)],0
004335D3 jmp $L48839+0Ah (004335eb)
2647: case 3: Option.B = 1; break;
004335D5 mov dword ptr [Option+18h (0048a5f8)],1
004335DF jmp $L48839+0Ah (004335eb)
2648: case 4: Option.B = 2; break;
004335E1 mov dword ptr [Option+18h (0048a5f8)],2
2649: }
「Index=-1」の時に何処か遠い所に逝かれます…。<マジ
直前に「if」が有るので、最適化が
「Index=-1」は来ないと判断したのかもしれない…。
実は、それは正しい!
if( ( Index <= 0 ) && ( Index <= 4 ) )<こんな風に間違え
// if( ( Index >= 0 ) && ( Index <= 4 ) )<本当は、こう
{
switch( Index )
{
case 0: Option.A = TRUE; break;
case 1: Option.A = FALSE; break;
case 2: Option.B = 0; break;
case 3: Option.B = 1; break;
case 4: Option.B = 2; break;
}
Function( );
}
直前の判断ミス(バグ)で「Index=-1」が
来てしまった…。
だからって…
逝く事は無いでしょう!
しかし、めったに喰らわないバグなので
早速ネタに使わせてもらいます!
| 固定リンク
コメント