2010-08-28 48 views
1

你好,我得到了使用的valgrind 当我与valgrind --leak-check=full使用它,事后excution文件的名称,它告诉我在哪个区块内存泄漏是一个问题,但如果我不能找到哪个我确实使用免费的指针。 是否有某种标志指示指针的名称。 如果无论如何告诉我在视觉工作室的泄漏位置,我也非常想听到它发现内存泄漏在Linux环境

回答

1

它不能告诉你指针的名字,因为一个内存泄漏的整体思路是,在内存没有指针指向的话(至少,供种泄漏是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) 

然后,你需要看看行1161在foo.c,这是功能do_foo()内。这是内存分配的地方(与malloc()),只有可以说它应该被释放的地方。

+0

你能告诉我什么是命令,看看在哪里创建内存泄漏请 – 2010-08-29 00:12:35

+0

@Nadav:上面的例子来自正常的Valgrind输出。这就是你需要的。 – caf 2010-08-29 00:50:15

1

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

+0

是的,我使用GCC,没有我没有使用-g – 2010-08-28 08:36:51

+0

在这种情况下使用-g和检查,因为调试符号可能不可用 – 2010-08-28 09:44:22