免费的Pascal heaptrc keepreleased被描述为“如果您怀疑相同的内存块被释放两次就很有用”但是有可能检测到以前释放的内存(释放对象的对象方法调用)的使用吗?如果不可能 - 可以用其他工具检测到吗?
答案 0 :(得分:1)
是的,应该这样做。这个想法如下:
使用的分配具有不同的.sig,然后是$ AAAAAAAA或$ DEADBEEF。在freemem上,如果useCRC为false,则检查sig(参见主干中的第593行)和sig $ AAAAAAA。
keepreleased可以防止块被重用,这会将签名更改为$ AAAAAAAA。它将打印如下内容:
标记记忆在12345678美元发布
到文件描述符ptext。可以使用各种其他变量设置和定向错误标准文件。它看起来相当复杂,但这可能是为了处理无控制台的GUI应用程序
其他一些变量(如haltonerror)控制应用程序是否因此类损坏而停止
另一种(但非常慢)的方法是使用valgrind(fpc选项-gv),但我只在* nix上运行valgrind,并且据说它非常慢,所以不适用于非常繁重的处理应用程序。