在linux环境中查找c代码中的内存泄漏

时间:2010-08-28 08:29:11

标签: c valgrind

你好我使用valgrind遇到了问题 当我使用它valgrind --leak-check=full,然后它的执行文件的名称,它告诉我在哪些块内存泄漏,但当我无法找到我使用免费的指针。 是否有某种标志告诉指针的名称。 如果无论如何要告诉我视觉工作室的泄漏在哪里我也非常想听到它

2 个答案:

答案 0 :(得分:1)

你没有说你正在使用哪种编译器,我想gcc? 您是否使用-g包含调试符号?

答案 1 :(得分:1)

它无法告诉你指针的名称,因为内存泄漏的整个想法是 no 指针不再指向内存(至少对于那种泄漏而言) Valgrind描述为“绝对迷失”)。

可以告诉你的是分配内存的源文件和行号 - 然后你需要在源代码中查找该行以找出内存所在的位置假设要解除分配。例如,如果Valgrind损失记录如下:

==17110== 49 bytes in 1 blocks are definitely lost in loss record 17 of 35
==17110==    at 0x4023D6E: malloc (vg_replace_malloc.c:207)
==17110==    by 0x80C4CF8: do_foo (foo.c:1161)
==17110==    by 0x80AE325: xyzzy (bar.c:466)
==17110==    by 0x8097C46: io (bar.c:950)
==17110==    by 0x8098163: main (quux.c:1291)

然后你需要查看foo.c中的第1161行,它位于函数do_foo()内。这就是分配内存的地方(使用malloc()),只有可以说明它应该被释放的位置。