Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我一直在以某种方式释放对象的地方遇到错误,但我们最终在它们上调用 FreeMem。当然,这会导致错误,因为内存已被释放并引发错误。
我知道 try-catch 块可能会修复它,但这是很多 try-catch 块。使用常规 object.free 避免这种情况的方法是 FreeAndNil(object) 但我找不到 FreeMem 的等价物。在释放之前测试它是否被分配的东西。
在易于阅读、可维护性和稳定性方面,这里最好的解决方案是什么。
相当于 FreeAndNil 只是
FreeMem(p); p := nil;
但是你最好通过在它被释放后找到你使用的对象来解决真正的问题。试试 FastMM - 它会帮助你完成这项任务。
无论如何,您不应该在对象上调用 FreeMem。它需要用它的析构函数来销毁,方法是调用 Free 。但是,如果您正在使用指向其他事物(例如记录)的指针,那么请按照 Ulrich 所说的进行。(它的两个部分。)