调试我的代码后,出现以下错误:
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.6
是 Linux
系统上的共享库,其中 fgets
函数驻留并且 0xb7d79a67
是(我猜)您的程序没有权限的主内存地址可能会超出文件长度。
当您访问 protected 内存区域或其他程序使用的内存区域(因此您的程序无权访问)时,可能会发生段错误(SEGSEGV)
。
阅读这些文章以更好地掌握: Segmentation fault why? , Debugging segmentation faults
关于c - fgets 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914330/