一个非常简单的问题:
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
吗?
谢谢!
答案 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中唯一没有初始化/最终确定的结构化类型