我怎样才能让valgrind告诉我每个未释放的内存块的地址?

时间:2009-10-08 19:57:46

标签: memory-leaks valgrind

Valgrind告诉我函数xxx已分配的内存未被释放。精细。然而,事实证明追踪比平常更困难。

为此,我创造了许多:

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

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

我怎样才能让valgrind告诉我每个未释放的内存块的地址?

2 个答案:

答案 0 :(得分:1)

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

如果您不介意在Memcheck中进行探讨,则应该能够在Valgrind源中的memcheck / mc_leakcheck.c中添加此功能。当我回到家并发布更详细的位置时,我会看看它。

答案 1 :(得分: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); }