0

私は数週間バグを追跡しています。マルチスレッド環境 (C++、VC2010) を使用していますが、新規または削除時にクラッシュが発生することがあります。

出力を見ると、解放された後に変更されたメモリに関する不満が表示されます ( HEAP: Free Heap block 55e6128 modified at 55e619c after it was freed)。同じアドレス ( ) のメモリを見ると、 E とその後の0x55e6128パターンが見えます。0xFEE00 00 00 00FE EE

私には、長い 4 バイトのメンバー (またはポインター) を持つ削除されたオブジェクトのように見え、オブジェクトが削除された後、誰かがこのメンバーをゼロに設定しようとしました。

それをデバッグする方法はありますか?

4

2 に答える 2

0

4 バイト メンバは公開されていますか? もしそうなら、これはパブリック データ メンバーが悪い理由の例であり、ほとんどの場合、それらをプライベートまたはプロテクトにする必要があります (場合によってはゲッター/セッターを提供します)。

したがって、パブリックの場合は、プライベートにしてゲッターとセッターを追加することをお勧めします。次に、セッターにブレークポイントを設定し、割り当てが解除されたオブジェクトに対してセッターが呼び出されるまで、アプリケーションを実行し続けます。

于 2012-09-18T06:40:40.763 に答える