1

我一直在以某种方式释放对象的地方遇到错误,但我们最终在它们上调用 FreeMem。当然,这会导致错误,因为内存已被释放并引发错误。

我知道 try-catch 块可能会修复它,但这是很多 try-catch 块。使用常规 object.free 避免这种情况的方法是 FreeAndNil(object) 但我找不到 FreeMem 的等价物。在释放之前测试它是否被分配的东西。

在易于阅读、可维护性和稳定性方面,这里最好的解决方案是什么。

4

2 回答 2

7

相当于 FreeAndNil 只是

FreeMem(p);
p := nil;

但是你最好通过在它被释放后找到你使用的对象来解决真正的问题。试试 FastMM - 它会帮助你完成这项任务。

于 2010-07-12T22:06:53.503 回答
0

无论如何,您不应该在对象上调用 FreeMem。它需要用它的析构函数来销毁,方法是调用 Free 。但是,如果您正在使用指向其他事物(例如记录)的指针,那么请按照 Ulrich 所说的进行。(它的两个部分。)

于 2010-07-12T22:26:15.540 回答