Delphi の record ポインタの Dispose で文字列が開放されない

Delphi の record ポインタの Dispose で文字列が開放されない

ListView Item の Data へポインタとしてレコード型を投入、OnDeletion で開放というコード
type
	TItemRec = record
		Name, Value: string;
	end;
	PItemRec = ^TItemRec;


var 
ItemRec: TItemRec;
PItem: PItemRec;

// 文字列投入
ItemRec.Name := 'key';
ItemRec.Value := 'val';

New(PItem);
PItem^ := ItemRec;

ListItem := ListView1.Items.Add;
ListItem.Data := PItem; // Dataへポインタを投入


// リスト削除時に開放
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
    if (Item.Data <> nil) then begin
        Dispose(Item.Data);
    end;
end;
このコード、文字列2つが開放されない
Dispose で元のレコード型にキャストして開放すればよいらしい
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
    if (Item.Data <> nil) then begin
        Dispose(PItemRec(Item.Data));
    end;
end;

コメント