私は、バグの原因を再現して見つけるのに大きな問題を抱えていました。発生は完全にランダムに見えるので、初期化されていない変数がどこかにあると思われます。しかし、その後、次のコードを見つけました。
CMyClass obj; // A
obj.DoStuff();
if ( somebool )
{
CMyClass obj; // B
obj.DoStuff();
}
obj.DoOtherStuff();
DoOtherStuff() が「B」で実行されるか、B.DoStuff() が実際に A で動作する場合があるようです。つまり、最初の obj で DoStuff() が実際に呼び出されます。
これは起こりえますか?コンパイラの警告は出なかったと思います (助けになることを期待して、コードを修正しました)。実際のコードのこの部分が、私が見つけようとしているバグの場所である可能性が非常に高いようですが、もちろん、まだ発見していない他の理由がある可能性もあります。