如果我编译了这个:
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>
为什么只用一个指针才能做到这一点?
答案 0 :(得分:4)
999999999 * sizeof(double)是7999999992字节。在32位平台上,这超过2 ^ 32字节。您根本无法在32位应用程序中处理那么多字节。
如果绝对必须有10亿双打,请使用64位平台。
答案 1 :(得分:1)
如果您使用的是64位平台并且有足够的RAM来支持内存分配,则编译器不会生成任何错误。如果任一条件为假,则编译器会生成错误或异常,并且没有“安全”方式来分配RAM以外的内存或超过OS和处理器支持的内存。