C fgets中的分段错误
调试代码后,出现以下错误: 程序接收信号SIGSEGV,分段故障。 来自/lib/i386 linux gnu/libc.so.6的fgets()中的0xb7d79a67C fgets中的分段错误,c,C,调试代码后,出现以下错误: 程序接收信号SIGSEGV,分段故障。 来自/lib/i386 linux gnu/libc.so.6的fgets()中的0xb7d79a67 有人能解释一下这是什么意思吗?这是一个使用CMake和OpenGL构建的项目。当一个程序试图访问它没有特权的内存时,Linux内核通过发送一个名为SEGV的信号来中断该程序。在您的fgets中,您输入的文本太多,可能超出了为指针分配的内存。信号是Linux内核与程序(正确意义上的进程)通信的一种方式。这是一种例外 因为,您正在
有人能解释一下这是什么意思吗?这是一个使用CMake和OpenGL构建的项目。当一个程序试图访问它没有特权的内存时,
Linux内核通过发送一个名为SEGV
的信号来中断该程序。在您的fgets
中,您输入的文本太多,可能超出了为指针分配的内存。信号是Linux内核与程序(正确意义上的进程)通信的一种方式。这是一种例外
因为,您正在处理文件。检查您的文件是否确实存在是值得的。可能是您没有读取文件的权限,因此出现错误
/lib/i386 linux gnu/libc.so.6
是linux
系统上的一个共享库,其中fgets
函数驻留,0xb7d79a67
是(我猜)您的程序没有权限的主内存地址可能超出了文件长度
当您访问受保护的内存区域或其他程序使用的内存区域时,可能会出现分段故障(SEGVEGV)
,因此您的程序没有任何访问权限
阅读以下文章以更好地掌握:
,这意味着fgets
访问了不应该访问的内存。但这是因为您将错误地使用它…是否已确认打开文件?一个常见的原因是您忘记检查fopen是否确实打开了您读取的文件。但请使用调试器在代码中找到确切位置,并检查变量。请尝试检查fopen的返回值。如果它是空的呢?因为您的“文件名”可能有尾随\n.@AnishRam在某种程度上看起来并不懒惰。。。他没有发布他的代码并要求我们调试。。。他只是问具体的错误是什么意思?谷歌搜索他的具体错误只会返回3个结果,所有关于stackoverflow的问题都只会返回,这意味着actaul结果为零。他不仅想让我们知道什么是
SEGSEGV
,还想让我们知道错误句子的解释。。。。这肯定是一个特定的编程问题。。。这就是为什么这个问题还没有结束。。。我想……)顺便说一下,无意冒犯::)在我的情况下,我相信我得到了一个segfault,因为我试图在捕获标志服务器上运行gdb中的受保护二进制文件。我想我可以将程序计数器或$rip设置为目标函数,但在gdb中运行该程序可能会阻止它访问我的用户无法读取的文件。这是许多线程中的第一个答案,它们实际上提供了一些上下文。虽然晚了7年,但是谢谢你的帮助!