我有一個程序,實現幾個啓發式搜索算法和幾個域,旨在通過實驗評估各種算法。該程序使用C++編寫,使用GNU工具鏈構建,並在64位Ubuntu系統上運行。當我運行我的實驗時,我使用bash的ulimit
命令來限制進程可以使用的虛擬內存量,以便我的測試系統不會開始交換。爲什麼我的程序在內存不足時偶爾會發生段錯誤,而不是拋出std :: bad_alloc?
某些算法/測試例組合擊中我已定義的內存限制。大多數情況下,程序拋出一個std :: bad_alloc異常,該異常由默認處理程序打印,此時程序終止。偶爾,而不是發生這種情況,程序只是段錯誤。
爲什麼當內存不足,而不是報告未處理的std :: bad_alloc的和終止我的程序偶爾段錯誤?
段錯誤不僅可造成的,因爲你打的內存 – Andrey 2010-04-02 16:09:29
限制,我很清楚。在我看到段錯誤的情況下,該過程一直在使用接近我指定限制的內存量。我非常有信心,我看到的段錯誤不是由於我的代碼中的錯誤。 – 2010-04-02 16:37:57
您是否考慮過在GDB中簡單運行(以及其中的幾個),以查看哪些代碼段錯誤? – Shiroko 2010-04-02 17:01:15