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;
コメント