[英]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
位操作系統每個進程將僅允許2
到3
GiB的虛擬地址空間,並且將拒絕這種例外情況下分配更多虛擬地址的嘗試。
如果您正在運行64
位操作系統並構建64
位可執行文件,則可能已達到交換限制,這將導致相同的錯誤。
此時,您的選擇是構建一個64位二進制文件(如果您使用的是64位OS),該文件仍將圍繞您的樣本大小進行磁盤交換,或者如果可能的話,對系統進行重新處理以減少256^2 * 8B = 0.5 MiB
表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.