私はヒープ上に配置されたオブジェクトがたくさんある非自明のソフトウェアプロジェクトをデバッグしています。ある時点で(少なくとも)これらのオブジェクトの1つが壊れてしまいます。ヒープ上の破損したオブジェクトのデバッグ
私はカナリアンとして機能するためにクラスにconstメンバーを追加しましたが、実際には実行中に破損します。通常、私はこの変数にウォッチポイントを追加して、いつメモリが書き込まれるか把握します。しかし、クラスに格納されている情報も破損するため、どのインスタンスが上書きされるのか分かりません。
各オブジェクトにウォッチポイントを設定するにはオブジェクトが多すぎますが、小さな入力セットでは再現できませんでした。 valgrindを実行しています私は "無効なサイズ4の読み取り"を参照してください、これは4バイトの私のカナリアンのintを読み取っているが、この時点ではすでに遅すぎます。
ここから進める方法についてのご意見はありますか?
タイトル:「ヒープ上」。質問: "スタック上に"。あなたの心を補ってください。 – molbdnilo
破損が発生する前にオブジェクトの一部が削除されていますか? '無効なサイズ4の読み込み'は、解放したメモリのように、または割り当てられたメモリブロックの外にはならないデータを読み込んでいることを意味します。 valgrindより詳しい情報を提供していませんか? 完全なvalgrindトレースを投稿できますか? – Tryum
ソースコードを確認してください。そのような腐敗が起きる可能性があるあなたは何をしていますか?プログラムはマルチスレッドであり、適切な同期が使用されていませんか?これらのオブジェクトへのポインタは共有されていますが、所有者の1人が他の所有者に通知せずにメモリを解放している可能性があります。その他 – PaulMcKenzie