今日、私はエラトステネスのふるいをプログラムしようとしましたが、素数を提供する限り機能します。しかし、理解できない動的配列に問題があります。
最初の問題: n に「大きな」値 (たとえば 120) を入力しようとするとすぐに、プログラムがクラッシュし、メモリを割り当てることさえできません。
2 番目の問題: 50 のような値を入力すると、正しい素数を取得できますが、配列が削除される前にクラッシュします。
3 番目の問題: 5 のような非常に小さい値を入力すると、プログラム全体を実行できますが、正しい数値が表示され、メモリが削除されます。
しかし、なぜそれがそれほど異なる動作をするのか理解できません。120 個のブール値が私の記憶をクラッシュさせることはありません。少なくとも私はそう思います。また、50 個の値の配列を削除できないのに、実際には 5 個の値の配列を削除できるのはなぜですか? 誰が私に何が問題なのか教えてもらえますか?
int n;
cin >> n;
n=n+1;
bool *feld = new bool[n];
for(int i=2;i<n;i++)
{
int j=i*i;
feld[j]=true;
for(;j<n;j+=i)
feld[j]=true;
}
for(int i=2;i<n;i++)
if(!feld[i])
cout << i << endl;
else;
delete[] feld;
feld = NULL;