2017-08-28 79 views
0

當運行valgrind與--leak-check=full時,生成的報告包含有關內存「可能丟失」的信息。Valgrind可能丟失內存

valgrind手冊中有一些相關信息,以及一些示例報告。

http://valgrind.org/docs/manual/mc-manual.html

LEAK SUMMARY: 
    definitely lost: 4 bytes in 1 blocks 
    indirectly lost: 0 bytes in 0 blocks 
    possibly lost: 0 bytes in 0 blocks 
    still reachable: 95 bytes in 6 blocks 
         of which reachable via heuristic: 
         stdstring   : 56 bytes in 2 blocks 
         length64   : 16 bytes in 1 blocks 
         newarray   : 7 bytes in 1 blocks 
         multipleinheritance: 8 bytes in 1 blocks 
     suppressed: 0 bytes in 0 blocks 

在我自己的系統,我的valgrind執行我的多線程測試二進制文件時得到充足的「可能」失去的記憶的。

這究竟意味着valgrind會將內存報告爲「可能丟失」?它在這個特定的執行過程中是失敗了還是不是?在我看來,內存泄漏應該比「可能丟失」更加黑白。

+0

我認爲你鏈接的文檔解釋了什麼被認爲是「可能丟失」的塊,以及爲什麼報告通常不會顯示黑白結果。 – VTT

回答

1

大致類別是

  • 仍然在使用=有一個活指針到所述存儲器的出口
  • 絕對丟失=沒有活指針存儲器
  • 間接丟失=有指向內存的指針,但它們處於「絕對丟失」的內存中。
  • 可能丟失=有一個指針,但不是內存的開始。

的主要原因在於Valgrind的將檢測可能丟失或者是

  1. 一些垃圾指針意外指向成塊。你應該認爲這是一個確定的損失。
  2. 分配子塊或保護帶的內存管理器。

因此,通常,如果您不使用內存管理器,請將您的可能損失視爲確定的損失。