2017-08-28 9 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. サブブロックまたはガードバンドを割り当てるメモリマネージャ。

したがって、メモリマネージャを使用していない場合は、損失の可能性があるものと見なされます。

関連する問題