2012-03-31 16 views
4
私は私のソフトウェアにメモリプロファイリングを少しやってる

とvalgrindのの、次のコマンドを使用して、標準のメモリリークチェックを実行した後Valgrindのとメモリリーク

valgrind --tool=memcheck --leak-check=full ./path_to_program 

私は概要以下しまっ:

= = 12550 ==リーク概要:間違いなく失わ

== 12550 ==:597170のバイトを7つのブロックで

== 12550 == indirectl yが失われた:10個のブロック

120のバイトは== 12550 ==おそらくは失わ:1,455ブロック内770281バイト

== 12550 ==まだ到達:2,319ブロックで181189バイト

== 12550 = =抑制:0ブロックの0バイト

== 12550 ==到達可能なブロック(ポインタが見つかったブロック)は表示されません。

== 12550 ==は、それらを表示するには、との再実行:--leakチェック=フル--show-到達可能= yesの

== 12550 ==

== 12550 ==カウントのために-v

== 12550 == ERROR概要::325のコンテキストから325のエラー(抑制:11から176)と、検出されたエラーを抑制し再実行の

それは私には非常に良い見ていません、私の質問は

です

これらのリークがすべてある場合、私のプログラムはなぜ爆発しないのですか?

も違いです:間違いなく、間接的に

  • おそらく失わ
  • を失った
  • を失った

    • はまだ到達可能

    とどのように私は修正しようとすることができますそれら?

  • +4

    なぜあなたはそれが爆発すると思いますか? –

    +0

    @OliCharlesworth原因多くのメモリが解放されていない – Matteo

    +0

    @Matteo:それはあなたが非常に制約の厳しい環境にいない限り、最悪の場合、わずかにMBのMBであり、 – Mat

    答えて

    14

    私が訪問することをお勧めValgrind FAQ

    Memcheckのメモリリーク検出器で

    、「まだ 到達可能」、「可能性が失われた」「間接的に失われた」、「絶対に失われた」 の違いは、何だと"抑制"?

    詳細は、ユーザーマニュアルのMemcheckセクション に記載されています。要するに

    • "間違いなく失われた" あなたのプログラムがメモリをリークしていること - これら リークを修正!

    • 「間接的に失われた」とは、プログラムが ポインタベースの構造でメモリをリークしていることを意味します。たとえば、バイナリツリーのルートノードが 「間違って失われた」場合、すべての子供は「間接的に失われます。」 が「間違って失われた」リークを修正した場合、「間接的に失われた」リークは になります。

    • は「おそらく失われた」あなたは彼らが に割り当てられたブロックの真ん中を指すように原因となるポインタを持つ珍しい事を やっている場合を除き、あなたのプログラムがメモリをリークしていること。 の可能性のある原因については、ユーザーマニュアルを参照してください。これらのレポートを にしたくない場合は、--show-possibly-lost=noを使用してください。

    • "まだ到達可能"とはあなたのプログラムがおそらくOKであることを意味します。 いくつかのメモリを解放しませんでした。これはかなり一般的であり、しばしば合理的です。 これらのレポートを表示しない場合は、--show-reachable=yesを使用しないでください。

    • 「抑制」は、リークエラーが抑制されたことを意味します。既定の抑制ファイルには、いくつかの抑制があります( )。 抑止されたエラーは無視できます。

    +0

    指摘のためのthks! – Matteo

    関連する問題