C++ 我分配的内存太多了吗?

C++ 我分配的内存太多了吗?,c++,memory-management,C++,Memory Management,我有一个编程赋值,其中我必须创建一个结构,该结构具有由以下函数定义的整数数组(大小为20): f(0)=2700 f(n+1)=2*f(n) 结构all有一个char*[](大小为20),其中每个元素都分配了内存,内存大小根据整数数组中的值确定。因此,索引越大,分配的内存就越多 我在循环中进行分配。bns是我的结构的一个对象,带有整数数组bigNums;而字符*[]则是bigLettersArray。以下是代码(缩小): #包括“stdafx.h” #包括 #包括 #包括 结构bignumstr

我有一个编程赋值,其中我必须创建一个结构,该结构具有由以下函数定义的整数数组(大小为20):

  • f(0)=2700
  • f(n+1)=2*f(n)
  • 结构all有一个char*[](大小为20),其中每个元素都分配了内存,内存大小根据整数数组中的值确定。因此,索引越大,分配的内存就越多

    我在循环中进行分配。bns是我的结构的一个对象,带有整数数组bigNums;而字符*[]则是bigLettersArray。以下是代码(缩小):

    #包括“stdafx.h”
    #包括
    #包括
    #包括
    结构bignumstruct{
    int bigNums[20];
    char*bigLettersArray[20];
    };
    int main()
    {
    Bignumstruct bns;
    bns.bigNums[0]=2700;
    bns.bigLettersArray[0]=新字符[2700];
    对于(int i=1;i<20;i++){
    bns.bigNums[i]=2*bns.bigNums[i-1];
    bns.bigLettersArray[i]=新字符[bns.bigNums[i]];
    }
    返回0;
    }
    

    在i=18之前,这一切正常,那么内存分配太多(大概是这样)。我正在尝试让它在我的Windows10机器上运行。代码在我的Mac和虚拟Linux机器上运行得很好。

    2^20是1000000不给即取*2700大约是30亿

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

    或者简言之,是的


    然而,对于64位系统上~1 gig的糟糕alloc,我会感到惊讶。您可能正在编译一个32位的exe。

    为什么要使用原始指针和
    new
    ?有什么好的、实质性的理由可以这样做吗?这不是我认为的实质性理由。作业的目的是回顾指针和动态内存分配。除此之外没有其他原因。你的Windows是32位的吗?如果你建议他领导一场反抗他的教授的起义,并使他的课不及格,我想说你的推理也没有那么充分。
    #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;
    }