Free Pascal heaptrc keepreleased は「同じメモリ ブロックが 2 回解放されている疑いがある場合に役立つ」と説明されていますが、以前に解放されたメモリの使用 (解放されたオブジェクトのオブジェクト メソッド呼び出し) を検出することは可能ですか? 不可能な場合 - 他のツールで検出できますか?
1 に答える
1
はい、そうするべきです。アイデアは次のとおりです。
使用された割り当てには、$AAAAAAAA または $DEADBEEF とは異なる .sig があります。freemem では、useCRC が false の場合、sig $AAAAAAA に対して sig がチェックされます (トランクの 593 行あたりを参照)。
keepreleased は、ブロックが再利用されるのを防ぎます。再利用すると、署名が $AAAAAAA 以外のものに変更されます。次のようなものが出力されます。
$12345678 のメモリをリリース
ファイル記述子 ptext に。エラー標準ファイルは、他のさまざまな変数を使用して設定および指示できます。かなり複雑に見えますが、おそらくコンソールレス GUI アプリケーションを扱うためのものです。
他のいくつかの変数 (haltonerror など) は、そのような破損でアプリケーションが停止するかどうかを制御します。
別の (しかし非常に遅い) 方法は valgrind (fpc オプション -gv) を使用することですが、私は *nix でのみ valgrind を実行しました。
于 2013-04-22T14:58:30.153 に答える