此代码是给我段错误:C++数组声明问题
#include <stdio.h>
int main(int argc,char** argv[]){
int ar[20000000];
return 0;
}
但是,如果我通过0减少数组的大小 - 那么它的罚款。我超过了最大尺寸?如果我想存储整数量呢?谢谢。
此代码是给我段错误:C++数组声明问题
#include <stdio.h>
int main(int argc,char** argv[]){
int ar[20000000];
return 0;
}
但是,如果我通过0减少数组的大小 - 那么它的罚款。我超过了最大尺寸?如果我想存储整数量呢?谢谢。
这可能与您试图在堆栈上分配超过70兆字节的数据有关。 Windows具有每个线程IIRC的默认堆栈大小为1兆字节。尝试用new
的空闲存储分配它,就像这样:
int* ar = new int[20000000];
,并使用它时,你就大功告成了,delete[]
它:
delete[] ar;
你得到堆栈溢出:D一个真正的。
在堆上分配的存储器,使用new
int* ar = new int[ 20000000 ];
// do stuff with ar
delete[] ar; // do **not** forget about this
您可能超过由堆栈帧,它是由编译器执行的允许的大小。如果您要动态分配空间,例如:
int array = new int[SIZE]
您将受到操作系统和硬件而不是您的编译器的限制。 (这是因为在堆上动态分配内存并将其存储,而局部声明的变量存储堆栈,其中有一个严格的大小限制上。)
,如果我没看错400万是极限
如果你真的想在堆栈上分配这个数组,你可以。你只需要增加堆栈大小。你没有说你正在使用什么编译器/链接器,但Visual Studio C++的说明在这里:http://msdn.microsoft.com/en-us/library/tdkhxaks.aspx和其他环境应该有类似的选项。
是什么让你认为它是70兆字节?它并不是说在C/C++标准中int是32位。 – 2011-05-09 00:19:50