-1

调试我的代码后,我收到以下错误:

程序收到信号 SIGSEGV,分段错误。来自/lib/i386-linux-gnu/libc.so.6的fgets()中的0xb7d79a67

谁能向我解释这意味着什么?这是一个使用 CMake 和 OpenGL 构建的项目。

4

1 回答 1

1

当一个程序试图访问它没有特权的内存时,它会Linux Kernel通过发送一个名为 的信号来中断程序SEGSEGV。在您的fgets, 可能是您通过输入太多文本超出了为指针分配的内存。信号是Linux Kernel与程序(正确意义上的进程)通信的一种方式。这是一种例外。

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

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

segmentation-fault(SEGSEGV)您访问受保护的内存区域或其他程序使用的内存区域时,可能会发生这种情况,因此您的程序没有任何访问权限。

阅读这些文章以获得更好的理解: Segmentation fault 为什么?,调试分段错误

于 2013-06-04T09:45:28.233 回答