c程序中的内存错误

时间:2011-04-03 12:52:34

标签: c linux gcc

我制作了一个程序,我正在处理文件,但是我收到了这个错误 (我已经通过gdb

运行了
  

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

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

任何人都可以告诉我

  • 此错误的含义
  • 是否因任何特殊原因而发生
  • 或者是因为很多原因而发生的一般性错误?

1 个答案:

答案 0 :(得分:4)

  

这个错误是什么意思?

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

  

是否因任何特殊原因而发生?

出于多种原因,可能会发生细分违规。但是,由于它发生在vfprintf,它可能仅限于:

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

这是最可能的原因。

  

或者是因为很多原因而发生的一般性错误?

正如我所说,可能出现的原因很多,但根据您的具体情况,它可能会受到限制。

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