ソフトウェアにメモリ リークがあるかどうかを調べています。そのため、メモリリークの可能性を見つけるために、さまざまなツールやプログラムを使用してきました。私が使用したソフトウェアの 1 つは AQTime でした。Delphi XE に付属していたので、これは単なるデモでした。そのため、そこから有益な情報を得ることができませんでした。そこで、フリーソフト MemProof を使うことにしました。これまでのところ、注意が必要なソフトウェアに関する多くの問題が示されています。そのうちの1つはエラーです。
MemProof を使用してプログラムを開始するとすぐに、ユニット ファイル system.pas から存在しないオブジェクトを破棄しようとしている 2 つのエラーが表示されます。そのため、実際に TObject.Free プロシージャ内にブレーク ポイントを配置すると、プログラムが完全に開始される前にブレーク ポイントが壊れてしまいます。system.pas の Free の手順を実行すると、TIconimage が自分自身を破棄または解放しようとしていることがわかりました。つまり、フリー プロシージャは、実際に起動する前にプログラム内から呼び出されることはありません。
実際の無料の手順は次のとおりです。
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
その観察の後、ブレークポイントを削除し、プログラムを最後まで実行させました。プログラムのメイン ウィンドウがポップアップし、ユーザー入力の準備が整いました。ただし、プログラムの WINDOW の一部が画面に表示されると、TObject.Free プロシージャがノンストップで呼び出されることもわかりました。私はそれをまったく理解していません。何故ですか?誰でも説明できますか?TForm が画面に表示されるとプロシージャが常に呼び出されるため、TForm は TObject.Free とどのように関連していますか?
前もって感謝します。