c - fgets 中的段错误

标签 c

调试我的代码后,出现以下错误:

Program received signal SIGSEGV, Segmentation fault. 0xb7d79a67 in fgets () from /lib/i386-linux-gnu/libc.so.6

谁能给我解释一下这是什么意思吗?这是一个使用 CMake 和 OpenGL 构建的项目。

最佳答案

当程序尝试访问它没有权限的内存时,Linux 内核 通过发送名为 SEGSEGV 的信号来中断程序。在您的 fgets 中,您可能由于输入过多的文本而超出了为指针分配的内存。信号是 Linux 内核与程序(正确意义上的进程)通信的一种方式。这是一种异常(exception)。

因为,您正在处理文件。值得检查您的文件是否确实存在。可能您没有读取该文件的权限,因此出现错误。

/lib/i386-linux-gnu/libc.so.6Linux 系统上的共享库,其中 fgets 函数驻留并且 0xb7d79a67 是(我猜)您的程序没有权限的主内存地址可能会超出文件长度。

当您访问 protected 内存区域或其他程序使用的内存区域(因此您的程序无权访问)时,可能会发生段错误(SEGSEGV)

阅读这些文章以更好地掌握: Segmentation fault why? , Debugging segmentation faults

关于c - fgets 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914330/

相关文章:

c - 使用 PIC 18F4550 使 3 个 LED 闪烁

c++ - 我们可以有递归宏吗?

c - 如何检查记录是否存在于C中的sqlite中

c - Opengl使 "AI"桨上下移动

python - 从 Python 使用 C

用c语言将文本编码成莫尔斯码

c - 如果堆内存满了会发生什么?

无法使用 GDB 进入 string.h 函数

c - 读取文件并传递到大型多维数组时出现问题

c - C 语言是否受版权保护?是否有任何使用条款?