我有一个代码,我想测试哪里可以获得段错误。但当我运行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在此之前关闭了第一个段错误,因此它会返回其他错误)。 有人可以帮我吗,拜托? 并感谢您的任何帮助。
答案 0 :(得分:0)
的fopen(argv的[1], “R”);
显然返回NULL(这是有意义的,因为它是地址0x0),请确保文件(在argv [1]中指定)存在并且(!)您在代码中执行NULL检查。
fscanf中的segfault很自然,因为你尝试从NULL读取 当你使用valgrind运行时,你是否忘记传递参数?