Free Pascal heaptrc keepreleased 被描述为“如果您怀疑同一个内存块被释放两次时很有用”,但是是否可以用它检测先前释放的内存(释放对象的对象方法调用)的使用情况?如果不可能 - 可以用其他工具检测到吗?
问问题
241 次
1 回答
1
是的,它应该这样做。思路如下:
使用的分配具有不同的 .sig,然后是 $AAAAAAA 或 $DEADBEEF。在 freemem 上,如果 useCRC 为假,则对照 sig $AAAAAAA 检查 sig(参见中继线中的第 593 行)。
keepreleased 防止块被重用,这会将签名更改为 $AAAAAAAA 之外的其他内容。它将打印如下内容:
已发布 12345678 美元的标记内存
到文件描述符 ptext。可以使用各种其他变量设置和引导错误标准文件。它看起来相当复杂,但这可能是为了处理无控制台的 GUI 应用程序
其他一些变量(如haltonerror)控制应用程序是否因此类损坏而停止
另一种(但非常慢)的方法是使用 valgrind(fpc 选项 -gv),但我只在 *nix 上运行了 valgrind,正如所说的那样非常慢,所以不适用于非常繁重的处理应用程序。
于 2013-04-22T14:58:30.153 回答