[英]Strange std::bad_alloc
據我所知,有三個原因可以拋出std :: bad_alloc:
我們有運行到std :: bad_alloc的代碼,但上述原因似乎都不適用。 數據結構是一個存儲為std :: verts列表的圖形,其中每個頂點再次存儲std :: list的邊緣列表,以及一些連續數據。
對於小圖形(<= 100'000個頂點),程序運行完全正常,無論每個頂點的數據部分有多大(我們可以毫無問題地分配最多40 GB)。 但是,如果頂點的數量變大,即使在使用“僅”8 GB內存的實例上,我們也會拋出std :: bad_alloc異常。
由於在較大的塊中分配更多內存時沒有問題,因此應排除上述原因1.和2. 有一些部分我們以極易出錯的方式使用指針,因此我們可能會破壞堆數據結構。 但是當在較小的實例上運行時,valgrind的memcheck會將我們的代碼報告為完美無缺,因此理由似乎也不太可能(在拋出實例時,valgrind本身會耗盡內存,所以我們無法直接檢查這種情況)。
是否有任何關於這種行為可能是什么原因的想法,或者我們可能會進行哪些測試以進一步確定問題?
操作系統:Fedora 19
構建系統:使用gcc 4.8.2進行cmake
我無法評論你的帖子,所以我會回復。
我在使用OpenFST和Kaldi時遇到了同樣的問題(與你的系統和gcc相同)。 我沒有跟蹤這個問題的確切起源,但似乎內核3.12就是問題所在。 我用其中一個備份內核(3.11系列之一)啟動,問題就消失了。
您可以使用:
yum list --showduplicates kernel
找到可用的3.11內核。
編輯:
似乎這個錯誤在內核3.12.11-201和3.13+中得到修復
資料來源: Bugzilla
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.