编辑:澄清。
- fout 是一个文件*。 (我认为这无关紧要,因为该行可以清楚地编译)
- 最后几行上面有很多代码;我想我可以把它们全部扔掉,但我想你对调试我的东西并不过分感兴趣。一般来说,我更感兴趣的是在返回 0 时可能发生的段错误,但之前不会。
警告:我的 C 很糟糕。
我有一个 C 程序,它只是想要出现段错误。我会为您省去其他不相关的细节,但这是大局:
我的代码:
//...other code
printf("finished \n");
fclose(fout);
printf("after fclose \n");
return 0;
输出:
finished
after fclose
Segmentation fault
我正在使用 GCC 进行编译,-std=c99。
我的问题:
这怎么可能?我应该看什么,这可能导致这个(看似随机的)段错误?有什么想法吗?
非常感谢!
最佳答案
无论 return
返回什么,都会导致错误。如果此代码片段在 main()
中,则代码已对堆栈造成损坏,很可能是超出了变量的范围。例如
int main ()
{
int a [3];
int j;
for (j = 0; j < 10; ++j)
a [j] = 0;
return 0;
}
这种事情可能会导致许多无法解释的症状,包括段错误。
关于c - C 中的奇怪/随机段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1895326/