重複の可能性:
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;
}
プログラムは MAX 値 = 1000000 で正常に動作します。しかし、値を 10000000 に増やすと、プログラムは segfault を返します。gdb を使用してみましたが、メインで segfault が発生して停止します。64 ビット OS を使用しています。MAX を削除して、MAX ではなく 10000000 を書き込んでも、同じエラーが発生します。どこが間違っていますか?助けてください。