在调用FreeMem之前检查内存是否已分配(Delphi 32)

时间:2010-07-12 21:52:36

标签: delphi memory free try-catch delphi-6

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

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

这里的最佳解决方案是易于阅读,可维护性和稳定性。

2 个答案:

答案 0 :(得分:7)

相当于FreeAndNil只是

FreeMem(p);
p := nil;

但是你可以通过找到你被释放后使用的对象来更好地解决这个问题。尝试FastMM - 它将帮助您完成该任务。

答案 1 :(得分:0)

无论如何,你不应该在一个对象上调用FreeMem。它需要通过析构函数来销毁它,通过调用Free来实现它。但是,如果你正在处理指向其他事物的指针(例如,记录),那么请参考Ulrich所说的内容。 (它的两个部分。)