Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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程序中的内存错误_C_Linux_Gcc - Fatal编程技术网

c程序中的内存错误

c程序中的内存错误,c,linux,gcc,C,Linux,Gcc,我已经做了一个程序,我在其中处理文件,但我得到了这个错误 (我已经通过gdb运行了它) 程序接收信号SIGSEGV,分段故障。 来自/lib/tls/i686/cmov/libc.so.6的vfprintf()中的0x0016e50b 我没有得到包含错误的确切行 有人能告诉我吗 这个错误意味着什么 发生这种情况有什么特殊原因吗 或者是由于多种原因导致的一般性错误 这个错误意味着什么 它基本上意味着你正在访问你不应该访问的内存 发生这种情况有什么特殊原因吗 分割冲突的发生有很多原因。但是,由于

我已经做了一个程序,我在其中处理文件,但我得到了这个错误 (我已经通过
gdb
运行了它)

程序接收信号SIGSEGV,分段故障。 来自/lib/tls/i686/cmov/libc.so.6的vfprintf()中的0x0016e50b

我没有得到包含错误的确切行

有人能告诉我吗

  • 这个错误意味着什么
  • 发生这种情况有什么特殊原因吗
  • 或者是由于多种原因导致的一般性错误
这个错误意味着什么

它基本上意味着你正在访问你不应该访问的内存

发生这种情况有什么特殊原因吗

分割冲突的发生有很多原因。但是,由于它发生在
vfprintf
中,因此可能仅限于以下内容:

  • 无效的文件指针
  • 没有为格式字符串传递足够的参数
  • 为C字符串传递空指针
  • 为C字符串传递以非null结尾的指针
  • 来自程序完全不同部分的内存损坏
这是最可能的原因

或者是由于多种原因导致的一般性错误

正如我所说的,它的发生可能有很多原因,但根据你的情况可能是有限的

在调用
printf
调用之前,请检查所有参数(当然,不要使用
printf
,请使用一些更健壮的调试代码,例如打印字符串的每个字符,并在每个字符之后刷新和fsyncing)。并检查文件句柄是否有效,以及传递给
vprintf
的参数数量是否与格式字符串中指定的参数数量匹配

这个错误意味着什么

它基本上意味着你正在访问你不应该访问的内存

发生这种情况有什么特殊原因吗

分割冲突的发生有很多原因。但是,由于它发生在
vfprintf
中,因此可能仅限于以下内容:

  • 无效的文件指针
  • 没有为格式字符串传递足够的参数
  • 为C字符串传递空指针
  • 为C字符串传递以非null结尾的指针
  • 来自程序完全不同部分的内存损坏
这是最可能的原因

或者是由于多种原因导致的一般性错误

正如我所说的,它的发生可能有很多原因,但根据你的情况可能是有限的


在调用
printf
调用之前,请检查所有参数(当然,不要使用
printf
,请使用一些更健壮的调试代码,例如打印字符串的每个字符,并在每个字符之后刷新和fsyncing)。并检查文件句柄是否有效,以及传递给
vprintf
的参数数量是否与格式字符串中指定的参数数量匹配。

是否有代码?如果不在gdb中显示代码,那么调试时会发生什么情况?键入
bt
获取回溯。您将获得有关代码失败位置的更多信息。张贴回溯以及代码的相关部分。可能是您的程序试图访问禁止的内存位置。检查所有数组或指针中是否存在内存泄漏。另外,提供代码以便我们可以查看。有一些代码吗?如果不在gdb中显示代码,那么调试时会发生什么情况?键入
bt
获取回溯。您将获得有关代码失败位置的更多信息。张贴回溯以及代码的相关部分。可能是您的程序试图访问禁止的内存位置。检查所有数组或指针中是否存在内存泄漏。此外,请提供代码以便我们进行调查。使用valgrind确定实际问题,包括受影响的代码行(如果二进制文件中存在调试信息)。使用valgrind确定实际问题,包括受影响的代码行(如果二进制文件中存在调试信息)。