我制作了一个程序,我正在处理文件,但是我收到了这个错误
(我已经通过gdb
)
编程接收信号SIGSEGV,分段故障。 来自/lib/tls/i686/cmov/libc.so.6的vfprintf()中的0x0016e50b
我没有得到包含错误的确切行。
任何人都可以告诉我
答案 0 :(得分:4)
这个错误是什么意思?
它基本上意味着您正在访问您不应该访问的内存。
是否因任何特殊原因而发生?
出于多种原因,可能会发生细分违规。但是,由于它发生在vfprintf
,它可能仅限于:
这是最可能的原因。
或者是因为很多原因而发生的一般性错误?
正如我所说,可能出现的原因很多,但根据您的具体情况,它可能会受到限制。
在调用printf
调用之前检查所有参数(当然不是printf
),使用一些更健壮的调试代码,例如在每个字符后打印字符串的每个字符并使用刷新和fsyncing)。并检查文件句柄是否有效以及传递给vprintf
的参数数量与格式字符串中指定的参数数量相匹配。