2015-02-07 24 views
0

运行我的代码时,它崩溃并说“分段错误”。C中的多个信号是否导致分段错误?

但是,当我在gdb中运行它时,它由于SIGABRT错误而不是SIGSEGV而崩溃。

是否还有其他信号也“映射”到终端上的一般分段故障错误?

+0

调试环境可能与非调试环境稍有不同,所以错误(可能是未初始化的指针)以不同方式显示自身,导致不同的崩溃。但直接回答你的问题是“只有SIGSEGV导致分段错误”。 – 2015-02-08 00:40:56

回答

0

abort()向调用进程发送SIGABRT信号,这是如何生成SIGABRT或Signal 6的。此外,大多数“断言”实现在断言失败的情况下使用SIGABRT。

abort()通常由库函数调用,用于检测内部错误或严重破坏的约束。例如,如果malloc()的内部结构被堆溢出损坏,它将调用abort()。

SIGSEGV或Signal 11,正式称为“分段错误”,表示程序访问未分配的内存位置。这通常是程序中的一个错误。所以如果你正在编写自己的程序,那是最可能的原因。否则我不会看到任何其他信号会在程序中产生分段错误。