0
運行我的代碼時,它崩潰並說「分段錯誤」。C中的多個信號是否導致分段錯誤?
但是,當我在gdb中運行它時,它由於SIGABRT錯誤而不是SIGSEGV而崩潰。
是否還有其他信號也「映射」到終端上的一般分段故障錯誤?
運行我的代碼時,它崩潰並說「分段錯誤」。C中的多個信號是否導致分段錯誤?
但是,當我在gdb中運行它時,它由於SIGABRT錯誤而不是SIGSEGV而崩潰。
是否還有其他信號也「映射」到終端上的一般分段故障錯誤?
abort()向調用進程發送SIGABRT信號,這是如何生成SIGABRT或Signal 6的。此外,大多數「斷言」實現在斷言失敗的情況下使用SIGABRT。
abort()通常由庫函數調用,用於檢測內部錯誤或嚴重破壞的約束。例如,如果malloc()的內部結構被堆溢出損壞,它將調用abort()。
SIGSEGV或Signal 11,正式稱爲「分段錯誤」,表示程序訪問未分配的內存位置。這通常是程序中的一個錯誤。所以如果你正在編寫自己的程序,那是最可能的原因。否則我不會看到任何其他信號會在程序中產生分段錯誤。
調試環境可能與非調試環境稍有不同,所以錯誤(可能是未初始化的指針)以不同方式顯示自身,導致不同的崩潰。但直接回答你的問題是「只有SIGSEGV導致分段錯誤」。 – 2015-02-08 00:40:56