C++ 为什么这段代码会引发异常\u堆栈\u溢出?

C++ 为什么这段代码会引发异常\u堆栈\u溢出?,c++,buffer-overflow,C++,Buffer Overflow,所以我写代码 我不明白为什么会出现异常\u堆栈\u溢出 #include <iostream> using namespace std; int main(){ char data[2048][2048] = {{0}}; cout << "test"; return 0; } 这两种情况都是一样的 Running "main.exe", press ESC to terminate... Crash

所以我写代码

我不明白为什么会出现异常\u堆栈\u溢出

#include <iostream>
using namespace std;
int main(){
    char data[2048][2048] = {{0}};
    cout << "test";
    return 0;
}
这两种情况都是一样的

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                       

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

std::unique_ptr<char[]> data(new char[2048*2048]);
std::唯一的ptr数据(新字符[2048*2048]);
但是,如果您确实希望或必须将其保留在堆栈上,则以下是用于更改默认堆栈大小的gcc标志:


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

4Mb大于默认堆栈大小。请参阅,因为数据太大,无法作为“自动存储持续时间”,因为数据太大,无法放在堆栈上。让它成为一个向量。我如何通过gcc扩展堆栈大小?@Daniel:不要这样做。将数组移到动态内存中。或者您可以增加分配的堆栈空间量。请不要建议使用
std::vector
@Mgetz更好地解决原始分配问题。我认为您应该重新考虑您在比较std::vector和std::unique_ptr时写的内容。@szulak您在争论什么?抛出的异常不会泄漏
数据
?与
std::vector
std::unique\u ptr
相比,该原始指针不难正确使用?猜猜看。我已经展示了两个选项,所以OP可以选择他/她想要的一个。无论如何,我编辑了我的答案并删除了原始分配。
std::unique_ptr<char[]> data(new char[2048*2048]);