我在这里创建了内存泄漏吗?

时间:2010-11-26 14:01:49

标签: delphi memory-management memory-leaks delphi-7

一个非常简单的问题:

type

TMyRecord = Record
  Int: Integer;
  Str: String;
end;

PMyRecord = ^TMyRecord;

var
  Data: PMyRecord;
begin
  New(Data);
  Data.Int := 42;
  Data.Str := 'Test';
  Dispose(Data);
end;

我的问题是,我在这里创建了一个内存泄漏(使用String)?我应该在致电Data.Str := '';之前致电Dispose吗?

谢谢!

4 个答案:

答案 0 :(得分:12)

不,Dispose可以正确释放记录中的字符串和动态数组,包括嵌套的数组。确实会GetMem / FreeMem(Data)造成内存泄漏。

答案 1 :(得分:10)

如果在allocate / deallocate对之间引发异常,则会发生内存泄漏。保护他们是正常的:

New(Data);
Try
  Data.Int := 42;
  Data.Str := 'Test';
Finally
  Dispose(Data);
End;

答案 2 :(得分:0)

不,不是,String删除后会自行清理自己的内存。

答案 3 :(得分:0)

如果你想要内存泄漏,那么你必须使用TP对象:-)它们是Delphi中唯一没有初始化/最终确定的结构化类型