你能告訴我什麼可能會導致C++ SIGABRT錯誤?什麼導致SIGABRT錯誤?
14
A
回答
8
這通常發生在庫遇到內部錯誤時,所以它們調用abort(),因爲它們不能繼續。當你覆蓋它的一個數據結構時(例如屬於libc的函數),可能會發生這種情況。所以這可能是例如libc調用,因爲你確實覆蓋了一些東西。然後應用程序必須終止,因爲不可能繼續或處理它,這被稱爲失敗的斷言。
10
SIGABRT
由處理時它調用abort
libc函數,在stdlib.h
定義發送給自身。SIGABRT
信號可以被捕獲,但不能被阻止;如果信號處理程序返回,則所有打開的流都關閉並刷新,程序終止(如果適用,則轉儲內核)。這意味着abort
調用永不返回。由於這一特點,它常常用於表示支持庫中的致命條件,即當前操作無法完成但主程序可在退出之前執行清理的情況。它在斷言失敗時使用。
這意味着,如果你的代碼是不是直接調用abort
也不能通過raise
將自身發送的信號SIGABRT
,而你沒有任何失敗的斷言,原因必須是一個支持庫(可以是libc中)遇到內部錯誤。如果您提供程序的詳細信息,我們可能會提出可能的原因。更妙的是,如果您檢查覈心或在調試器中運行程序,您應該能夠收集堆棧跟蹤,這將顯示哪個庫導致程序中止。
(這也可能是您的系統上的其它程序發送程序SIGABRT
,但是這是在大多數情況下難以察覺的可能性很小。)
3
在實踐中,這通常是由斷言宏觸發:
char* foo = NULL;
assert(foo != NULL);
會導致SIGABRT
相關問題
- 1. 爲什麼這會導致SIGABRT錯誤?
- 2. WriteData導致sigabrt錯誤
- 3. SIGABRT致命錯誤
- 4. 爲什麼[dict valueForKey:@「@」]會導致SIGABRT?
- 5. 什麼導致ENOTCONN錯誤?
- 6. IAP導致SIGABRT
- 7. 爲什麼「導入javax.jdo。*」導致錯誤?
- 8. 的ctime()導致SIGABRT
- 9. 是什麼導致DynamoDB UpdateItem在Swift中導致致命錯誤?
- 10. 爲什麼會導致「exc_bad_access」錯誤?
- 11. 是什麼導致HttpListener HTTP 503錯誤?
- 12. PDO:爲什麼會導致錯誤?
- 13. 爲什麼CPPUNIT_ASSERT_MESSAGE會導致OpenMP錯誤?
- 14. 什麼是導致此錯誤消息?
- 15. 是什麼導致iOS鏈接錯誤?
- 16. pthread_join導致分段錯誤。爲什麼?
- 17. 什麼導致Python分段錯誤?
- 18. 什麼ELSE導致此Android Studio錯誤?
- 19. 是什麼導致這個「Unexpected'else'」錯誤?
- 20. 爲什麼它會導致錯誤?
- 21. 什麼導致poll()函數,C++錯誤?
- 22. 什麼導致了這個NoClassDefFoundError錯誤?
- 23. 什麼能導致這個Firebug錯誤?
- 24. 什麼導致此命令行錯誤?
- 25. 是什麼導致「Directory not empty」錯誤?
- 26. 區分是什麼導致mkdir錯誤
- 27. 什麼導致這個QT 4.7.3錯誤?
- 28. 是什麼導致JDBC Type 91錯誤?
- 29. 什麼會導致此SIGSEGV錯誤?
- 30. 爲什麼MySQL導致語法錯誤?
好一點!! :)我試圖尋找了它說,它發送到從編譯器中止過程中對系統的信號,但我的編譯器並沒有說這部分是造成這一不尋常行爲,對n向下箭頭,我詢問可能的原因。我的代碼長度爲500行。 – user1444426
@ user1444426 - 在調試模式下編譯(使用g ++的-g),使用dbx,它會發現問題。 –
@Ecatmur,維基百科頁面並不是那麼有用。它所說的只是「放棄」提出了這個信號,但它並沒有超出這個範圍。我有時會在程序中獲得'SIGABRT'信號,但我從未*直接調用過'abort'。 –