3

Valgrind 告诉我函数 xxx 分配的内存没有被释放。美好的。然而,事实证明比平常更难追踪。

为此,我创建了许多:

#ifdef DEBUG
fprintf(stderr, "something happening:%lx\n", (unsigned long)ptr);
#endif

所以我只需要将这些显示的ptr地址与未释放内存的地址进行匹配。

如何让 valgrind 告诉我每个未释放内存块的地址?

4

2 回答 2

1

感谢 Falaina 提供代码位置。

对于 valgrind-3.2.3,对我有用的位置在 memcheck/mc_leakcheck.c、lc_scan_memory_WRK 函数中。

在 lc_markstack_push_WRK(addr, clique); 之后添加了这个 第 472 行

if (clique != -1) { VG_(printf)("clique %d: %p\n", clique, ptr); }

于 2010-03-26T16:59:59.837 回答
1

不幸的是,我不相信 Memcheck 的泄漏检查器支持打印地址。这是因为如果它们相似,它愿意将多个未分配的块合并到一个“损失报告”中。

如果你不介意在 Memcheck 中闲逛,这个功能应该可以添加到 Valgrind 源代码的 memcheck/mc_leakcheck.c 中。回家后我会看看它并发布更详细的位置。

于 2009-10-08T21:17:56.210 回答