2010-08-28 47 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