如果我声明:
FastMM 4内存管理器报告发现有内存泄漏(类型:字符串,数据转储:“something bla bla bla”)。然而,在调用
PSomeStruct = ^TSomeStruct;
TSomeStruct = record
s1 : string;
end;
我运行了以下代码:
var
p: PSomeStruct;
begin
new(p);
p^.s1:= 'something bla bla bla';
dispose(p);
FastMM 4内存管理器报告发现有内存泄漏(类型:字符串,数据转储:“something bla bla bla”)。然而,在调用
dispose
之前将s1字符串设置为空,则可以避免该问题。
我找到的第二种方法是将记录类型更改为类,然后不再使用new
,而是创建实例,不再使用dispose
,而是调用instance.Free()
。这样可以避免手动清理字符串。
是否有一种方法可以在调用dispose
时让Delphi自动清理我的字符串?
Dispose
调用。应该会有一个对_FinalizeArray
的调用,然后它应该调用_LStrClr
。如果这是编译器的错误,那么它一定是在为记录生成TTypeInfo数据时出错了,如果那个数据是错误的,那么New
代码也将是错误的。你可能会面临未初始化字符串字段的危险。 - Rob Kennedy