2012-03-08 50 views
-3

如果我编译如下:分配一个999999999单元格阵列| C++

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。

有没有安全的为什么只用一个指针来做到这一点?

+3

你有那么多的记忆吗?此外,您必须使用MSVC的旧版本才能获得错误C2148。 – Mysticial 2012-03-08 06:42:44

+0

我正在使用MSVC 2008 – Jonas 2012-03-08 06:44:23

+2

这是编译器,体系结构(X86 32位还是x86-64 64位?)和系统相关的。所以你应该有更多的细节才能得到答案。然而,编译器可能是正确的:在你的机器上没有办法分配10亿双(应该吃8G字节;你确定你有足够的内存吗?) – 2012-03-08 06:44:49

回答

4

999999999 * sizeof(double)是7999999992字节。在32位平台上,这是超过2^32字节的方式。您无法在32位应用程序中寻址那么多字节。

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

+2

...或一个巨大的文件。 – 2012-03-08 07:38:35

1

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

相关问题