2015-02-07 52 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,正式稱爲「分段錯誤」,表示程序訪問未分配的內存位置。這通常是程序中的一個錯誤。所以如果你正在編寫自己的程序,那是最可能的原因。否則我不會看到任何其他信號會在程序中產生分段錯誤。