Delphi – 没有释放结构的字符串[FastMM manager]

如果我宣布

PSomeStruct = ^TSomeStruct;
TSomeStruct = record 
  s1 : string;
end;

然后我运行以下代码:

var
  p: PSomeStruct;
begin
  new(p);
  p^.s1:= 'something bla bla bla';
  dispose(p);

FastMM 4内存管理器报告存在内存泄漏(类型:字符串,数据转储:“bla bla bla bla”).但是,如果我在调用dispose之前将s1字符串设置为空,那就没问题.

我找到的第二种方法是从记录类型更改为类,然后不是新的我正在创建实例,而不是dispose我正在调用instance.Free().它无需手动清洁琴弦即可工作.

当我调用dispose时,有没有办法让Delphi自动清理我的字符串?

最佳答案 FastMM是你的.dpr中使用的第一个单元吗?否则它可能太早确定,报告错误的记忆泄漏.

这个简化的代码示例是否也会产生与使用JvSimpleXML时相同的内存泄漏?如果不是,那么你可能还会有更多的事情发生.

在我看来:当FastMM报告内存泄漏时,存在内存泄漏.

点赞