0

新しいアプリケーションの 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の解放方法がわかりません...

4

1 に答える 1