我遇到了以某种方式释放对象的错误,但我们最终调用了FreeMem。当然这会导致错误,因为内存已经被释放并引发错误。
我知道try-catch块可能会修复它,但这是很多try-catch块。使用常规object.free避免这种情况的方法是FreeAndNil(object),但我找不到FreeMem的等价物。在释放之前测试是否分配的东西。
这里的最佳解决方案是易于阅读,可维护性和稳定性。
答案 0 :(得分:7)
相当于FreeAndNil只是
FreeMem(p);
p := nil;
但是你可以通过找到你被释放后使用的对象来更好地解决这个问题。尝试FastMM - 它将帮助您完成该任务。
答案 1 :(得分:0)
无论如何,你不应该在一个对象上调用FreeMem。它需要通过析构函数来销毁它,通过调用Free来实现它。但是,如果你正在处理指向其他事物的指针(例如,记录),那么请参考Ulrich所说的内容。 (它的两个部分。)