这段代码给了我segfault:
#include <stdio.h>
int main(int argc,char** argv[]){
int ar[20000000];
return 0;
}
但是,如果我将数组的大小减少0 - 那就好了。我超过了最大尺寸吗?如果我想存储那么多的整数怎么办?感谢。
答案 0 :(得分:6)
这可能与您尝试在堆栈上分配超过70兆字节的数据有关。 Windows的每个线程IIRC的默认堆栈大小为1兆字节。尝试使用new
在免费商店中分配它,如下所示:
int* ar = new int[20000000];
当您使用它时,delete[]
它:
delete[] ar;
答案 1 :(得分:3)
你有堆栈溢出:D真实的。
使用new
int* ar = new int[ 20000000 ];
// do stuff with ar
delete[] ar; // do **not** forget about this
答案 2 :(得分:1)
在堆栈上声明int ar[20000000]
,需要大约70MB +(76.2939453MB)的内存...也许你的空间不足?
使用new
在堆上进行分配。
答案 3 :(得分:1)
您可能超出了堆栈帧允许的大小,这是编译器强制执行的。如果要动态分配空间,例如:
int array = new int[SIZE]
您将受到操作系统和硬件的限制,而不是您的编译器。 (这是因为动态分配内存将它存储在堆上,而本地声明的变量存储在堆栈上,这个变量具有更严格的大小限制。)
答案 4 :(得分:0)
如果我没错,那么400万就是限制
答案 5 :(得分:0)
如果你真的想在堆栈上分配这个数组,你可以。您只需要增加堆栈大小。您没有说明您使用的编译器/链接器,但Visual Studio C ++的说明在此处:http://msdn.microsoft.com/en-us/library/tdkhxaks.aspx,其他环境应该有类似的选项。