Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fgets中的分段错误_C - Fatal编程技术网

C fgets中的分段错误

C fgets中的分段错误,c,C,调试代码后,出现以下错误: 程序接收信号SIGSEGV,分段故障。 来自/lib/i386 linux gnu/libc.so.6的fgets()中的0xb7d79a67 有人能解释一下这是什么意思吗?这是一个使用CMake和OpenGL构建的项目。当一个程序试图访问它没有特权的内存时,Linux内核通过发送一个名为SEGV的信号来中断该程序。在您的fgets中,您输入的文本太多,可能超出了为指针分配的内存。信号是Linux内核与程序(正确意义上的进程)通信的一种方式。这是一种例外 因为,您正在

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

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


有人能解释一下这是什么意思吗?这是一个使用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年,但是谢谢你的帮助!