我有一个编程任务,我必须创建一个结构,它有一个由这些函数定义的数组(大小为20)的整数:
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机器上运行良好。
答案 0 :(得分:1)
2 ^ 20是1000000给予或接受。 * 2700约为30亿。
在32位系统上,没有足够的地址空间。在64位系统上,它可能需要大量虚拟内存。两者都可能导致分配错误。
或者简而言之是。
然而,我对64位系统上~1 gig的错误分配感到惊讶。你可能正在编译一个32位的exe。