在main throws堆栈内声明的数组溢出,在main之外声明不会

时间:2013-02-10 08:06:37

标签: c++

我有以下代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int pnp[2][105],fin[2][105];
    int time[105],n,m,dummy,prod = 0;
    int const maxvv = 2000000;
    int d[maxvv];
    return 0;
}

我在int d[maxvv]获得了一个stackoverflow。但是,如果我转向全球范围

#include<iostream>
#include<cstdio>
using namespace std;
int const maxvv = 2000000;
int d[maxvv];
int main(){
    int pnp[2][105],fin[2][105];
    int time[105],n,m,dummy,prod = 0;

    return 0;
}

我没有收到此错误。任何人都可以告诉我有什么区别。在Windows 7上使用vs 2008和c ++

1 个答案:

答案 0 :(得分:4)

你破坏了堆栈。它通常大约1MB左右,你分配的不仅仅是这个。移动到全局空间可以解决您的错误,因为那里有更多可用空间而不是堆栈。