std :: bad_alloc我分配了太多内存吗?

时间:2018-01-29 03:01:32

标签: c++ memory-management

我有一个编程任务,我必须创建一个结构,它有一个由这些函数定义的数组(大小为20)的整数:

  1. F(0)= 2700
  2. F(N + 1)= 2 * F(N)
  3. struct all有一个char * [](大小为20),其中每个元素都分配了内存,该内存的大小根据整数数组中的值。所以索引越大,分配的内存就越多。

    我在循环中进行此分配。 bns是我的struct的一个对象,带有整数数组bigNums;和char * []作为bigLettersArray。这是代码(缩小):

    #include "stdafx.h"
    #include <iostream>
    #include <cstdlib>
    #include <vector>
    
    struct BigNumsStruct {
        int bigNums[20];
        char* bigLettersArray[20];
    };
    int main()
    {
        BigNumsStruct bns;
        bns.bigNums[0] = 2700;
        bns.bigLettersArray[0] = new char[2700];
        for (int i = 1; i < 20; i++) {
            bns.bigNums[i] = 2 * bns.bigNums[i - 1];
            bns.bigLettersArray[i] = new char[bns.bigNums[i]];
        }
        return 0;
    }
    

    这可以正常工作直到i = 18,然后内存分配太多(大概)。我试图让它在我的Windows 10机器上运行。代码在我的Mac和我的虚拟化Linux机器上运行良好。

1 个答案:

答案 0 :(得分:1)

2 ^ 20是1000000给予或接受。 * 2700约为30亿。

在32位系统上,没有足够的地址空间。在64位系统上,它可能需要大量虚拟内存。两者都可能导致分配错误。

或者简而言之是。

然而,我对64位系统上~1 gig的错误分配感到惊讶。你可能正在编译一个32位的exe。