为什么Valgrind会清理我的输入文本文件?

时间:2013-07-03 01:26:51

标签: c segmentation-fault valgrind

我有一个代码,我想测试哪里可以获得段错误。但当我运行valgrind时,如果让我转向一个我没有做错的地方。它会忽略输入的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,这就是返回此段错误的原因(但是由于valgrind在此之前关闭了第一个段错误,因此它会返回其他错误)。 有人可以帮我吗,拜托? 并感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

的fopen(argv的[1], “R”);

显然返回NULL(这是有意义的,因为它是地址0x0),请确保文件(在argv [1]中指定)存在并且(!)您在代码中执行NULL检查。

fscanf中的segfault很自然,因为你尝试从NULL读取 当你使用valgrind运行时,你是否忘记传递参数?