2017-06-20 4 views
2

の読み:Valgrindの無効がどういうわけかValgrindのは、私のプログラムの最初の行でエラーを示しサイズ1(のsscanf)

int main(int argc, char** argv) { 
    int i, r; 
    sscanf(argv[1], "%d", &r); 

    return 0; 
} 

Valgrindのレポート:

==18674== Invalid read of size 1 
==18674== at 0x4ECB1A0: rawmemchr (in /usr/lib64/libc-2.23.so) 
==18674== by 0x4EB2F41: _IO_str_init_static_internal (in /usr/lib64/libc-2.23.so) 
==18674== by 0x4EA16C6: __isoc99_vsscanf (in /usr/lib64/libc-2.23.so) 
==18674== by 0x4EA1666: __isoc99_sscanf (in /usr/lib64/libc-2.23.so) 
==18674== by 0x400DE3: main (test_b_arbre.c:18) 
==18674== Address 0x0 is not stack'd, malloc'd or (recently) free'd 
==18674== 
==18674== 
==18674== Process terminating with default action of signal 11 (SIGSEGV) 
==18674== Access not within mapped region at address 0x0 
==18674== at 0x4ECB1A0: rawmemchr (in /usr/lib64/libc-2.23.so) 
==18674== by 0x4EB2F41: _IO_str_init_static_internal (in /usr/lib64/libc-2.23.so) 
==18674== by 0x4EA16C6: __isoc99_vsscanf (in /usr/lib64/libc-2.23.so) 
==18674== by 0x4EA1666: __isoc99_sscanf (in /usr/lib64/libc-2.23.so) 
==18674== by 0x400DE3: main (test_b_arbre.c:18) 

を私はいくつかの同様の質問を経て、しかし、私は、プログラムを実行する方法...それを修正する方法を を見つけられませんでした:

valgrind --leak-check=yes --track-origins=yes ./b_arbre 1 2 3 4 5 6 
+1

プログラムに '#include 'がありますか? – Barmar

+0

@Barmarこれは必須ですが、この問題の赤ちゃんです。 – Kaz

+0

Valgrindは 'test_b_arbre.c'にエラーを表示します。おそらく、あなたは、そのファイルのコードの中に基になる回答があったときに、この記事であまりに単純化したコードを投稿したでしょうか? –

答えて

1

64ビットx86_64 Linuxで正確なプログラムをコンパイルしました(Valgrindの出力に64ビットライブラリのヒントがあります)。問題は再現されません。 sscanf暗黙の宣言が正しくないという警告が表示されますが、それは赤いニシンです。

私は64ビットPower PC Linuxでも試しました。クリーンValgrindも。

は、(プログラムがケースargv[argc]が行われている、引数なしで呼び出された場合はもちろん、ヌルポインタ参照が発生します。しかし、問題は引数でを生じるものとして記載されている。)

問題の可能性がありますテスト対象の実行可能ファイルがソースコードと一致していないことを確認します。

+0

どういうわけか私はファイルをどこか別の場所に置き、そこから電話して問題はありませんでした...LinuxFedoraの好奇心がたったのものだと思います。この簡単なアイデアをありがとう –

1

あなたがいないと、それを呼び出しています引数のため、argv[1]はヌルポインタです。コマンドライン引数を指定することで "修正"します。 argcをチェックし、それが1であれば何か他のことをして正しく修正してください。

+0

コマンドラインから '1 2 3 4 5 6'の引数はありませんか? – Barmar

+0

私は引数を持っています、私はそれをチェックするとrは1の正しい値を持っています –

+0

'argc'が1の場合、引数はありません... –

関連する問題