0

どこでセグメンテーション違反が発生するかをテストしたいコードを取得しました。しかし、valgrind if を実行すると、何も悪いことをしていない場所に戻ってしまいます。入力されたtxtファイルを無視して消去します。コードは次のとおりです。

int main(int argc, char * argv[]){
FILE * input=fopen(argv[1],"r");
FILE * output=fopen(argv[2],"w");
int i,j,NumCrom;
int instancias=0,torres,InstanciaAtual=0;
    fscanf(input,"%i",&instancias);
//......
return (EXIT_SUCCESS);
}

valgrind エラー:

 1 errors in context 1 of 1:
==13878== Invalid read of size 4
==13878==    at 0x53A935A: __isoc99_fscanf (isoc99_fscanf.c:31)
==13878==    by 0x400CF0: main (main.c:18)
==13878==  Address 0x0 is not stack'd, malloc'd or (recently) free'd

しかし、その部分に問題はありません。関数でtxtを個別に読み込むとうまくいきました。valgrind を開始するたびに入力 txt を消去し、それがこの segfault を返すものです (ただし、その前の最初の segfault 呼び出しで valgrind が閉じるため、返されないものがあります)。誰か助けてくれませんか?そして、それについて助けてくれてありがとう。

4

1 に答える 1

0

fopen(argv[1],"r");

どうやら NULL を返しているようです (これはアドレス 0x0 であるため意味があります)。(argv[1] で指定された) ファイルが存在することを確認し、(!) コードで NULL チェックを行ってください。

NULLから読み取ろうとするため、fscanfのセグメンテーション違反は当然のことです。
valgrind で実行するとき、パラメーターを渡すのを忘れていませんか?

于 2013-07-03T10:31:45.977 に答える