Valgrind告诉我函数xxx已分配的内存未被释放。精细。然而,事实证明追踪比平常更困难。
为此,我创造了许多:
#ifdef DEBUG
fprintf(stderr, "something happening:%lx\n", (unsigned long)ptr);
#endif
所以我只需要将显示的这些ptr地址与非释放内存的地址进行匹配。
我怎样才能让valgrind告诉我每个未释放的内存块的地址?
答案 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); }