分配一个999999999单元格的数组C ++

时间:2012-03-08 06:40:37

标签: c++ arrays pointers new-operator

如果我编译了这个:

long double *N;

N = new long double[999999999];

我收到此错误:

error C2148: total size of array must not exceed 0x7fffffff bytes

所以,我尝试编译这个:

long double *N;
long double *N2;

N = new long double[999999999];
N2 = N + 99999999;
N2 = new long double[900000000];

我仍然没有运行该程序,但我很确定我会收到heap corruption detected错误,因为我不想用N导航然后在某一点导航N2。< / p>

为什么只用一个指针才能做到这一点?

2 个答案:

答案 0 :(得分:4)

999999999 * sizeof(double)是7999999992字节。在32位平台上,这超过2 ^ 32字节。您根本无法在32位应用程序中处理那么多字节。

如果绝对必须有10亿双打,请使用64位平台。

答案 1 :(得分:1)

如果您使用的是64位平台并且有足够的RAM来支持内存分配,则编译器不会生成任何错误。如果任一条件为假,则编译器会生成错误或异常,并且没有“安全”方式来分配RAM以外的内存或超过OS和处理器支持的内存。