2017-09-16 72 views
1
可能失去的記憶

任何程序我跑Valgrind的告訴我說,有72個可能丟失字節3塊,甚至一個簡單的程序,如:Valgrind的簡單程序

int main(void) 
{ 
    printf("Hello, World!\n"); 
    return 0; 
} 

你知不知道這是否是一個Valgrind的Mac OS sierra上的錯誤?

我怎麼能泄漏這樣的程序內存?

+3

它說'可能丟失'。可能在crt中有一些。如果它總是存在,並且不增長,不要擔心。 –

回答

2

,可以很可能發生的,如果任何預加載的庫(例如,經由LD_PRELOAD),或連接的C運行的任何部分的有內存泄漏。

還有一些由CRT執行的內存分配,這些內存永遠不會有意釋放,但通常這些只是一次性事物,並且每個進程只發生一次。

Valgrind無法可靠地區分應用程序的哪些部分不是什麼。您只能從內存分配的位置檢查堆棧跟蹤,然後確定這是否是您的域。

+0

而且你可以爲這些錯誤生成抑制因爲它們不屬於你的程序。事實上,* valgrind *對已知問題有很多限制。 –

+0

請注意,分配的內存並未釋放,但引用依然存在的內存不是泄漏。在工藝終止時,只留下「一次性」的分配將被操作系統真空吸塵器清除,這並不罕見,甚至是一定不好。 –