簡體   English   中英

奇怪的std :: bad_alloc

[英]Strange std::bad_alloc

據我所知,有三個原因可以拋出std :: bad_alloc:

  1. 該進程請求的內存多於可以提供的內存
  2. 地址空間過於分散,無法滿足大塊連續內存的請求
  3. 堆管理數據結構已損壞

我們有運行到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM