2011-08-08 76 views
0

Valgrind的泄漏文件摘要:的valgrind報告未釋放的塊

ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 
malloc/free: in use at exit: 45,065 bytes in 12 blocks. 
malloc/free: 161 allocs, 149 frees, 53,301 bytes allocated. 
searching for pointers to 12 not-freed blocks. 
checked 583,764 bytes. 

一個這12個塊是從strdup。我應該已經釋放了由strdup分配的東西,我同意。

我的問題是,一般來說,留下非釋放塊是不好的?技術上叫做mem-leak

一旦程序死亡,它們是否不回饋給系統?

請指教。

編輯0:感謝您的回覆。我怎麼知道這12個非釋放塊在哪裏?哪部分代碼正在生成它們?

+0

'--track-fds = yes' - 是我需要的作爲valgrind的參數。我的編程泄漏了他們:D – hari

回答

3

它被返還給系統。

它在技術上不是內存泄漏,如果你有一個內存引用。要成爲內存泄漏您必須取消引用內存。

void *str = malloc(10); 
str = NULL; 

在任何點都留下非釋放塊是不好的。如果程序正在完成它,它可能並不是那麼糟糕,但它對你將來可能做的任何改變都是不利的(例如:提取一個函數並多次調用它)。另外,擺脫所有內存泄漏將使用valgrind跟蹤任何新的(相關的)漏洞更容易。

+0

我喜歡'de-reference'的雙重含義。 (認爲​​'x = * str;'。) –

3

是的,離開非釋放塊是不好的。這就是所謂的內存泄漏。如果你讓它你的程序將最終使用你的系統中所有可用的內存。 程序死後程序分配的內存被釋放。