bad_alloc用于大型数组

时间:2017-04-28 15:05:50

标签: c++ arrays out-of-memory

我遇到了C ++中内存分配的问题。请看下面的代码:

int main()
{
    std::vector<BYTE *> v;
    srand(GetTickCount());
    // Load a document and free it.
    int nDocSize = 1500;
    while (nSize <= 1024 * 1024 * nDocSize)
    {
        int n = rand() % (1024 * 1024) + 1;
        v.push_back(new BYTE[n]);
        nSize += n;
    }
    for (auto itArr = v.begin(); itArr != v.end(); ++itArr)
    {
        delete[] * itArr;
    }
    // Load an image.
    BYTE *data = new BYTE[1024 * 1024 * 500];
    delete[] data;

    return 0;
}

我分配总大小为1.5GB的对象。解除分配后程序崩溃(bad_alloc异常)我试图分配一个大小为500MB的数组。

但是这个代码不会因为较低的nDocSize值而崩溃,例如500.你能解释一下导致bad_alloc异常的原因,我该如何解决这个问题?对于从PDF加载的图像,我需要这么大的数组。

我使用Visual Studio 2015,它崩溃了x86应用程序。

1 个答案:

答案 0 :(得分:1)

MSVC声称任何请求内存超过0x80000000的新语句都会失败。顺便说一下,分配一大块内存也是不可接受的,现在正在按矢量进行。

您可以选择deque&lt;&gt;,它通常管理一系列连续的内存块,每个块可能更小,并且扩展其容量也更便宜。您也可以自己管理记忆。