簡體   English   中英

C ++:what():std :: bad_alloc錯誤

[英]c++: what(): std::bad_alloc error

在下面的代碼中,我有一個DoubleTableEntries結構,它由一個int和char組成。 我在代碼中遇到的問題是,當我的大小<= 5000時,但當大小值大於6000或9033時,代碼運行良好。 它開始給我這個錯誤:

terminate called after throwing an instance of std::bad_alloc
what(): std::bad_alloc
Aborted(core dumped)

當我的大小為9033時,出現上述錯誤,並且此循環停留在5923。

我認為對於我來說,內存應該不是一個大問題,因為RAM大小為4GB,並且沒有其他消耗大內存的程序與它一起運行。

請指導我如何避免此問題。

struct  DoubleTableEntries **NewDoubleTable;
NewDoubleTable = new DoubleTableEntries*[size];


for(int i = 0; i < size; ++i)
          { 
        NewDoubleTable[i] = new DoubleTableEntries[256*256];
  }

您內存不足,尤其是進程所允許的虛擬地址空間。

5923 * (256 * 256) * 8B ~= 3GiB.

32位操作系統每個進程將僅允許23 GiB的虛擬地址空間,並且將拒絕這種例外情況下分配更多虛擬地址的嘗試。

如果您正在運行64位操作系統並構建64位可執行文件,則可能已達到交換限制,這將導致相同的錯誤。

此時,您的選擇是構建一個64位二進制文​​件(如果您使用的是64位OS),該文件仍將圍繞您的樣本大小進行磁盤交換,或者如果可能的話,對系統進行重新處理以減少256^2 * 8B = 0.5 MiB表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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