警告:我的C太糟糕了。
我有一个C程序,从喜欢它,只是想要到段错误。我会饶你其他的,不相关的细节,但这是大局:
//...other code
printf("finished \n");
fclose(fout);
printf("after fclose \n");
return 0;
完成
在fclose之后 分段错误
我正在使用GCC进行编译,-std = c99。
这怎么可能呢?我应该注意什么,这可能导致这个(看似随机的)段错误?有什么想法吗?
非常感谢!
答案 0 :(得分:9)
无论return
返回的是什么导致了错误。如果此代码段位于main()
中,则代码会对堆栈造成损害,最有可能超出变量的范围。例如
int main ()
{
int a [3];
int j;
for (j = 0; j < 10; ++j)
a [j] = 0;
return 0;
}
这种事情可能导致许多无法解释的症状,包括段错误。
答案 1 :(得分:2)
由于它可能是与堆栈损坏相关的问题,您还可以使用内存调试器来查找损坏的来源,例如valgrind。
只需使用gcc -g
进行编译,然后运行valgrind yourprog args
。
答案 2 :(得分:1)
“Hello world!”程序段错误?如果是这样,那么你有硬件问题。如果没有,那么您在代码中至少有一个问题没有向我们展示!
答案 3 :(得分:0)
使用调试标志gcc -g
编译您的程序,并在gdb
中运行您的代码。当执行有问题的代码或相对于其他输出时,您无法始终信任控制台输出“分段错误”。在许多情况下,这会产生误导 - 您会发现gdb
等调试工具非常有用。