2013-03-31 37 views
1

我已经减少了程序与意见,下到这一点:FCLOSE(中)分割断裂

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    FILE * in; 
    in = fopen(argv[1], "r"); 
    fclose(in); 
    fprintf(stderr, "clear **** \n"); 
    return(0); 
} 

但它仍然出现segfaults。输出是:

clear 
Segmentation Fault 

我知道这是导致问题的fclose(in),我只是不知道为什么。无论出于何种原因,fclose(out)都可以很好地工作。

+1

你在命令行传递什么?如果fopen()调用失败,你将基本上调用fclose(NULL)。 –

+0

“他们”说例外是一件坏事... :-) –

+1

总是检查函数的返回值。文件IO失败很多... – stdcall

回答

3

你应该做的第一件事是这样的:

in = fopen(argv[1], "r"); 
if (in == NULL) 
    printf ("Could not open file '%s'\n" argv[1]); 
else 
    fclose(in); 

有一个在你原来的代码不能保证fopen实际工作,在这种情况下,它会返回NULL和fclose不会被定义的行为。

+0

谢谢!这为我缩小了很多。 – user2019645