Cコードアプリが1つあります。MS-VS2005を使用して構築していました。mallocを使用して動的に割り当てられていた1つの出力データバッファーがありました。
一部のテストケースでは、mallocされていたメモリサイズが、生成された実際の出力サイズ(バイト単位)よりも不足していました。その大きいサイズの出力が小さいサイズのバッファに書き込まれ、バッファオーバーフローが発生しました。その結果、テスト実行がクラッシュし、MSVS-2005に「ヒープの破損...」というウィンドウが表示されました。
動的メモリ割り当てに関係していることはわかっていましたが、出力に必要な十分なサイズを割り当てていたため、メモリ割り当てを疑うことなく、実際に根本的な原因を見つけるのに長い時間がかかりました。しかし、ある特定のテストケースでは、私が計算したよりも多くの出力が生成されたため、クラッシュが発生しました。
私の質問は:
1.)このような動的メモリバッファのオーバーフロー状態を検出するために使用できるツール。また、バッファオーバーフロー状態の検出にも役立ちますか(バッファ/アレイがヒープ、スタック、グローバルメモリ領域にあるかどうかに関係なく)?
2.)メモリリークツール(Purifyなど)またはlint、klocworksなどのコード分析ツールは特定の場合に役立ちますか?ランタイム分析ツールでなければならないと思います。
ありがとうございました。
-広告。