在我的簡單遊戲中,有一個線程可以繪製到屏幕上。當我按下ESC鍵時,我讓程序拋出一個退出信號作爲例外。只要發現這個異常,就會調用清理函數並退出程序。這種'預期'分段錯誤發生在清理功能被調用時,如果畫面沒有完成繪圖,並且繪圖線程有些孤立。我的Ubuntu Linux操作系統似乎可以安全地處理這個問題,並且不會崩潰,儘管它告訴我一個分段錯誤。你認爲可以這樣離開嗎?如果不是,我可能面臨什麼樣的嚴重問題?在這種情況下,我對系統內部發生的一切有點感興趣。安全分割錯誤?
Q
安全分割錯誤?
2
A
回答
4
據我所知,主線程是釋放繪圖線程所使用的內存而沒有任何形式的同步,也就是說,主線程在繪圖線程寫入時可以釋放內存。
這並不安全,你絕對不應該這樣離開它。主線程上的退出處理程序應該停止繪圖線程,或者等待它完成,然後釋放內存。
正如您所描述的,您的代碼具有未定義的行爲。請注意,按預期工作是未定義行爲的有效形式 - 但這並不意味着它將始終按預期工作。任何事情都可能發生。
3
這種分段錯誤可能意味着您嘗試訪問內核設置的進程保留之外的內存。
您應該嘗試解決導致分段錯誤的問題,這是一個非常有用的內存分析工具,您可以從您的ubuntu存儲庫中安裝它。
1
這聽起來不像一個好的設計,實際上聽起來非常類似於Coding by exception反模式。最好讓線程將事件發回到主要步驟,並執行「加入」以進行受控關閉。
0
當你想退出程序時,你可以隱藏gui並嘗試標記所有正在運行的線程停止。在程序中調用退出之前,請先檢查循環,直到所有線程都以迭代超時停止。爲避免CPU過載,請在此循環中加入睡眠
相關問題
- 1. 全局指針的分割錯誤
- 2. 分割錯誤
- 3. 分割錯誤
- 4. 分割錯誤?
- 5. 分割錯誤
- 6. 分割錯誤
- 7. 安裝後的分割錯誤
- 8. C分割錯誤錯誤
- 9. 分割錯誤錯誤
- 10. 分割錯誤錯誤
- 11. 分割錯誤(11)
- 12. Gensim分割錯誤
- 13. AES_set_encrypt_key分割錯誤
- 14. 分割錯誤Strdup
- 15. SWFTools分割錯誤
- 16. pysqlite分割錯誤?
- 17. pthread(分割錯誤)
- 18. Xdebug分割錯誤
- 19. SDL2分割錯誤
- 20. Nokogiri分割錯誤?
- 21. 分割錯誤strtok
- 22. 分割(「\\」)和錯誤
- 23. 分割錯誤Python
- 24. Python分割錯誤?
- 25. 分割錯誤:gdb
- 26. C分割錯誤
- 27. C分割錯誤
- 28. SDL_Surface分割錯誤
- 29. BingoBoard分割錯誤
- 30. Python分割錯誤?
heh? 「安全地處理這件事並且不會崩潰,你是什麼意思,雖然它告訴我一個分段錯誤」? –
此外,您可能想了解[未定義行爲](https://en.wikipedia.org/wiki/Undefined_behavior)。 –
還有一個關於_recovering_ SIGSEGV的問題,這是不可能的。 –