为什么此代码会提升到EXCEPTION_STACK_OVERFLOW?

时间:2015-03-26 18:06:21

标签: c++ buffer-overflow

所以我写了代码。

我不明白为什么这会是EXCEPTION_STACK_OVERFLOW?

#include <iostream>
using namespace std;
int main(){
    char data[2048][2048] = {{0}};
    cout << "test";
    return 0;
}

即使我没有使用

char data[2048][2048];

两种情况都是一样的。

Running "main.exe", press ESC to terminate...        
Crash                                                
  EXCEPTION_STACK_OVERFLOW                           
  time consumed: 0.01 sec                            
  time passed:   0.08 sec                            
  peak memory:   4395008 bytes                       

1 个答案:

答案 0 :(得分:2)

您的变量太大,无法将其保留在堆栈中。您应该使用动态存储持续时间。

std::unique_ptr<char[]> data(new char[2048*2048]);

但是,如果你真的想要或必须将它保留在堆栈中,这里有一个gcc标志来改变默认的堆栈大小:

- stack,4194304 其中4194304是以字节为单位的堆栈大小