将数组声明为静态不会导致程序崩溃

时间:2013-08-31 19:06:45

标签: c++ arrays

当我初始化1,000,000个整数的数组时,程序崩溃了,但是当我把关键字static放在前面时,一切都很完美,为什么?

int a[1000000] <- crash
static int a[1000000] <- runs correctly

3 个答案:

答案 0 :(得分:3)

原因是第一个被分配在堆栈上,并且没有足够的堆栈空间来容纳它。

第二个生活在数据部分。

由于您已对问题[c++]进行了标记,因此我建议您使用std::vector代替数组。

答案 1 :(得分:0)

当变量是非静态变量时,它在堆栈上分配。使用~4 MB数组,您可能会遇到堆栈溢出

答案 2 :(得分:0)

第一个是在堆栈上分配的,你可能已经溢出了堆栈。第二个是在全局/静态内存中分配的,它在程序启动时分配。

您也可以使用malloc / free或new / delete,因此它将在堆上,但是您需要确保它成功。