C++ 我分配的内存太多了吗?
我有一个编程赋值,其中我必须创建一个结构,该结构具有由以下函数定义的整数数组(大小为20):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
#包括“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;
}