C ++数组声明问题

时间:2011-05-08 21:02:51

标签: c++ arrays

这段代码给了我segfault:

#include <stdio.h>  

int main(int argc,char** argv[]){  

int ar[20000000];  

return 0;  

}  

但是,如果我将数组的大小减少0 - 那就好了。我超过了最大尺寸吗?如果我想存储那么多的整数怎么办?感谢。

6 个答案:

答案 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,其他环境应该有类似的选项。