最近、ヒープの破損を伴う最初の戦い (解決済み)に遭遇しました。自宅の Linux マシンでは、valgrind と electric-fence (gdb を使用) を使用して、犯人コードがエラーなしで終了します。しかし、私たちの研究室の Windows マシンでは、参照した投稿で説明されているように、VS から一貫してヒープの破損に関連するエラー メッセージが表示されます。
valgrind と電気柵がそのような問題を検出しないのは驚くべき (または少なくとも珍しいこと) でしょうか? 他の誰かが、こちらの回答でvalgrindを逃した可能性のある同様のバグについて言及しました。これらのツールでこの問題が検出されない理由は何ですか? エラーが実際にヒープの破損であることを疑う理由はありますか?
更新:元の問題を説明した投稿で述べたように、問題は std::vector 内の要素へのポインターが原因であることがわかりました。これは悪くなりました。ベクトルを std::list (新しい要素を追加してもポインターが無効にならない) に置き換えると、問題が修正されました。valgrind が問題を検出しなかった理由についての私の質問に戻りますが、今後同様の状況、つまり valgrind によって検出されないメモリの問題を回避する方法についての推奨事項があるかどうかを尋ねます。お気に入りのツール。STL がどのように機能するかをよりよく理解することは、明らかに良い考えです。おそらく、プログラミングなどで assert を使用してより積極的になる必要があります。