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

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

ListView Item の Data へポインタとしてレコード型を投入、OnDeletion で開放というコード
  1. type  
  2.     TItemRec = record  
  3.         Name, Value: string;  
  4.     end;  
  5.     PItemRec = ^TItemRec;  
  6.   
  7.   
  8. var   
  9. ItemRec: TItemRec;  
  10. PItem: PItemRec;  
  11.   
  12. // 文字列投入  
  13. ItemRec.Name := 'key';  
  14. ItemRec.Value := 'val';  
  15.   
  16. New(PItem);  
  17. PItem^ := ItemRec;  
  18.   
  19. ListItem := ListView1.Items.Add;  
  20. ListItem.Data := PItem; // Dataへポインタを投入  
  21.   
  22.   
  23. // リスト削除時に開放  
  24. procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);  
  25. begin  
  26.     if (Item.Data <> nilthen begin  
  27.         Dispose(Item.Data);  
  28.     end;  
  29. end;  
このコード、文字列2つが開放されない
Dispose で元のレコード型にキャストして開放すればよいらしい
  1. procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);  
  2. begin  
  3.     if (Item.Data <> nilthen begin  
  4.         Dispose(PItemRec(Item.Data));  
  5.     end;  
  6. end;  

コメント