【发布时间】:2014-03-18 23:02:57
【问题描述】:
当我编写以下程序时,它可以正常工作,即 bitset 数组是在 main() 方法之外声明的。
正常工作
#include <iostream>
#include <bitset>
using namespace std;
bitset<5000> set[5000];
int main(){
cout<<"program runs fine"<<endl;
return 0;
}
但是当我在 main 方法中创建它时,我得到了堆栈溢出异常。谁能详细解释这里发生了什么?通常我会在递归方法中看到堆栈溢出异常。那么谁在这里使用堆栈呢?
#include <iostream>
#include <bitset>
using namespace std;
int main(){
bitset<5000> set[5000];
cout<<"program runs fine"<<endl;
return 0;
}
不起作用并引发堆栈溢出异常
【问题讨论】:
-
TL;DR;: 通常'非全局数组'和对它们的引用可能超出范围,并且无效 之后的任何访问!
-
定义一个大的局部变量是获得堆栈溢出的好方法。对大变量使用动态分配。
-
对不起,我没有明白你的意思。第二个程序甚至没有运行,但如果我将大小减小到 50,那么它运行良好,所以与内存有关,但看起来这里涉及不同类型的内存。我听说过堆栈和堆。但是这里没有动态内存分配,所以不涉及堆。
-
只是进入黑暗,我认为@PaulR 是对的......
标签: c++ arrays out-of-memory stack-overflow bitset