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