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

Dai*_*tsu 1 memory delphi free try-catch delphi-6

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

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

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

Uli*_*rdt 7

相当于FreeAndNil

FreeMem(p);
p := nil;
Run Code Online (Sandbox Code Playgroud)

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

  • 分配资源的代码部分永远不应该在`try-finally`块中,它应该在`try`之前.如果有充分的理由让'try-finally`块中的AllocMem最终在`finally`中调用FreeMem,那么在你输入`try`以使`finally`安全之前分配指针`nil`. (2认同)