c ++:what():std :: bad_alloc错误

时间:2014-05-20 05:08:18

标签: c++

在我的下面的代码中,我有一个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];
  }

1 个答案:

答案 0 :(得分:5)

您的内存不足,特别是您的流程允许的虚拟地址空间。

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

32位操作系统将仅允许每个进程的23 GiB虚拟地址空间之间的某个位置,并且将拒绝尝试使用此异常分配更多。

如果您正在运行64位操作系统并构建64位可执行文件,则可能达到了交换限制,这会导致相同的错误。

此时您的选择是构建一个64位二进制文​​件(如果您使用的是64位操作系统),它仍将围绕您的样本大小进行磁盘交换,或者在可能的情况下重新处理您的系统一次只有256^2 * 8B = 0.5 MiB个表。