使用#define的最大数组大小

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,我也会遇到相同的错误。我要去哪里错了?请帮忙。

Oli*_*rth 5

您不应该将非常大的数组声明为局部变量(即在堆栈上),因为堆栈大小通常非常有限。而是使用new[]和动态分配它们delete[]。或对于惯用的C ++,使用类似的容器类std::deque

  • @ShehbazJaffer,在测量之前,您不可能完全确定每种情况,在必须测量之前,您不应该测量。在过早优化之前就担心工作代码。 (2认同)