c - C 中的奇怪/随机段错误

标签 c segmentation-fault

编辑:澄清。

  • 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/

相关文章:

c - memmem() 的段错误

c++ - MPI_Send 双指针

将十进制值转换为十六进制值

c - 计算大型 CRC32 的正确方法是什么

c - 尝试从 char*[] 复制所有字符串但出现段错误

c++ - 在抛出 'std::length_error' what(): basic_string::_S_create 实例后终止调用

c - 使用 fgets() 从 stdin 读取

c - 结构链表 - 如何编辑数据

c - 为什么多线程比单线程慢?

c - 在 C 程序中获取 shell 脚本的退出代码