我尝试启动一个bool数组,其大小为20000001.代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
const unsigned long long int size = 20000001;
bool prime[size];
return 0;
}
然后我成功编译它,但是当我运行它时,Windows会发出一个停止运行的消息,而GDB只会抛出SIGSEGV (Segmentation fault)
。
但是在我在main函数外部启动数组(相同大小)之后,代码看起来像这样:
#include <iostream>
#include <cstring>
using namespace std;
bool prime[size];
int main(){
const unsigned long long int size = 20000001;
memset(prime,true,size);
return 0;
}
不会抛出任何错误,程序也能顺利运行 所以我的问题是,导致SIGSEGV信号的原因是什么?它与堆栈溢出有关吗?