新しいアプリケーションの 1 つがクラッシュする理由を突き止めようとしている間、私は Delphi のメモリ リークを追跡してきました。
私はFastMMの最新バージョンを接続し、結果に取り組んできましたが、簡潔にするために最小限の骨にまで煮詰めた次のことで混乱しています。
2 つの文字列フィールドで定義されたレコードがあります。これらは 2 つの TEdit ボックスから割り当てられ、同時にデータを TListView に書き込みます。キーコードは次のとおりです。
procedure TForm1.SetAssignment;
var
tp: TestPointer;
SourceTable, SourceColumn: string;
LI: TListItem;
begin
SourceTable := Edit1.Text;
SourceColumn := Edit2.Text;
LI := lvTest.Items.Add;
LI.Caption := SourceTable;
LI.SubItems.Add(SourceColumn);
new(tp);
// Leak occurs here
tp^.SourceTable := SourceTable;
tp^.SourceField := SourceColumn;
// No leak if preceding lines are ommitted
TestList.Add(tp);
end;
問題は、の値SourceTable/SourceColumn
または tp^ にあるようです。値。
TList は、終了時に適切に消去されています。割り当てをコメント アウトするtp^.SourceTable/tp^.SourceField
と、メモリ リークは発生しません。
新年だからかもしれませんが、SourceTable/SourceColumnの解放方法がわかりません...