4

現在、Ubuntu Raring Ringtail x86 を実行しています。新規インストールと更新の後、「Learning C The Hard Way」チュートリアルの指示に従って Valgrind 3.8.1 をインストールしました。Valgrind を実行することはできますが、コード内のエラーの行番号を示す代わりに、次のように表示されます。

==9300==    by 0x4060714: (below main) (libc-start.c:227)

Valgrind の完全なレポートはこちら: http://pastebin.com/1spmkFrU

私は -g フラグを使用していると確信しており、--track-origins=yesを使用すると、エラーが関数内にある場所ではなく、間違った関数が始まる場所のみが表示されます。(これは--trackを使用した結果です: http://pastebin.com/ktvY8HEM )

使用しようとしているメイクファイルとコードは次のとおりです。

メイクファイル:

CFLAGS=-Wall -g

EXECUTABLES=ex1 ex3 ex4

all: $(EXECUTABLES)

clean:
    rm -f $(EXECUTABLES)

コード:

#include <stdio.h>

/*This program is purposefully broken */

int main()
{
    int age = 10;
    int height;

    printf("I am %d years old.\n");
    printf("I am %d inches tall.\n", height);

return 0;
}
4

2 に答える 2

0

のスタック割り当てセマンティクスmain()はちょっと変わっています。誤ったコードを別の関数に入れて、から呼び出してみてくださいmain()。そうすれば、より意味のある結果が得られる可能性があります。

さらに重要なのは、とをに追加-Wallしてみ-OてくださいCFLAGS。未使用の変数との誤用はprintf()すべて、コンパイル時に検出できます。

于 2012-11-29T06:23:21.983 に答える