2012-01-27 26 views
0

我以前使用valgrind,它一直很有幫助。我最近設置了一個開發環境並重新開始使用valgrind。這一次它發現沒有失去記憶!即使我malloc一些內存,然後用CTRL-C中斷程序,我得到下面的轉儲。有人可以解釋發生了什麼嗎?valgrind沒有捕捉到明顯的丟失內存

困惑....

==2489== HEAP SUMMARY: 
==2489==  in use at exit: 314,145 bytes in 585 blocks 
==2489== total heap usage: 1,410 allocs, 825 frees, 2,025,829 bytes allocated 
==2489== 
==2489== LEAK SUMMARY: 
==2489== definitely lost: 0 bytes in 0 blocks 
==2489== indirectly lost: 0 bytes in 0 blocks 
==2489==  possibly lost: 0 bytes in 0 blocks 
==2489== still reachable: 314,145 bytes in 585 blocks 
==2489==   suppressed: 0 bytes in 0 blocks 
==2489== Reachable blocks (those to which a pointer was found) are not shown. 
==2489== To see them, rerun with: --leak-check=full --show-reachable=yes 
==2489== 
==2489== For counts of detected and suppressed errors, rerun with: -v 
==2489== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 6 from 6) 
+1

記憶不丟失,如果程序終止,你仍然有一個指針。它顯示在「仍然可以訪問」下,因爲它在程序結束時仍然可以訪問。 – 2012-01-27 17:12:54

+1

ctrl + c發送一個SIGINT,它基本上會中斷您的程序繼續執行。這就是爲什麼你得到「仍然可以訪問」,因爲所有的內存已被分配,但沒有釋放。如果你使用valgrind建議的標誌,主要是'--show-reachable = yes',那麼它會給出位置。 – BlackJack 2012-01-27 17:15:35

+0

@BlackJack:請作爲答案,我會upvote它,這解釋它比任何已經存在的更好。 – 2012-01-27 17:26:46

回答

4

如果仍然有一個指針malloc版內存,它不是一個泄漏。它在總結中顯示爲仍可到達

內存,是不是free版,如果它仍然活着,就是有一個指向它的地方仍然不一定泄露(全球範圍內,從堆棧,或者從寄存器)