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

Xar*_*ara 0 c++

在下面的代码中,我有一个DoubleTableEntries结构,它由int和char组成.我得到的代码问题是,当我的大小<= 5000时,但是当大小值大于6000或9033时,代码运行正常.它开始给我这个错误:

terminate called after throwing an instance of std::bad_alloc
what(): std::bad_alloc
Aborted(core dumped)
Run Code Online (Sandbox Code Playgroud)

当我的尺寸是9033并且这个循环卡在5923时,我得到了上述错误.

我认为在我的情况下内存应该不是一个大问题,因为RAM大小为4GB,并且没有其他大内存消耗程序随之运行.

请指导我如何避免这个问题.

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


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

Jef*_*eff 5

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

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

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

如果您正在运行64一些操作系统并构建一个64可执行的位,您可能已达到交换限制,这将导致相同的错误.

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