She*_*fer 0 c++ arrays segmentation-fault c-preprocessor
可能重复:
堆栈溢出C ++
我有以下生成素数的程序:
#include<iostream>
#include<cmath>
#include<algorithm>
#define MAX 10000000
using namespace std;
int main(int argc, const char *argv[])
{
bool prime[MAX+1];
fill_n(prime,MAX+1,true);
int baseSqrt,i,j;
baseSqrt = int(sqrt(MAX+1));
for(i=2;i<=baseSqrt;i++){
if(prime[i]){
for(j=i+i;j<=MAX;j+=i){
prime[j]=false;
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序在MAX值= 1000000时可以正常工作。但是当我将该值增加到10000000时,该程序将出现段错误。我尝试使用gdb,但是它在主要给段错误的地方停止了。我正在使用64位操作系统。即使我删除MAX并写入10000000而不是MAX,我也会遇到相同的错误。我要去哪里错了?请帮忙。
您不应该将非常大的数组声明为局部变量(即在堆栈上),因为堆栈大小通常非常有限。而是使用new[]和动态分配它们delete[]。或对于惯用的C ++,使用类似的容器类std::deque。