2016-05-20 4 views
-1

私はEratosthenesシーブをC++で実装しようとしています。私はDev C++ 5.11コンパイラを使用しています。コードを実行するたびに、コンパイラcrashesが実行されます。配列の値が小さい場合(n = 10000)、プログラムは正常に実行されますが、テキストファイルにgarbage valuesが印刷されます(添付の画像を見つけてください)。私はプログラミングのアマチュアであり、この問題を一日以上にわたって解決してきました。どんな助けでもうれしいでしょう。 お時間をありがとう! :)Dev C++バージョン5.11でプライム・シーブがクラッシュする

#include <iostream> 
 
using namespace std; 
 
#include <fstream> 
 

 
int main(){ 
 
\t ofstream myfile("Prime.txt"); 
 
\t int n = 1000000; 
 
\t int prime[n] = {0}; 
 
\t for (int i = 2; i <= n; i++){ 
 
\t \t \t for (int j = i*i; j <= n; j+=i){ 
 
\t \t \t \t prime[j - 1] = 1; 
 
\t \t \t } 
 
\t } 
 
\t for (int i = 2; i <= n; i++){ 
 
\t \t //cout<<prime[i-1]<<endl; 
 
\t \t if (prime[i - 1] == 0) 
 
\t \t \t myfile<<i<<" "; 
 
\t } 
 
\t myfile.close(); 
 
\t return 0; 
 
}

+0

私はあなたが出て何かを取得するつもりだと思います["なぜ大きなローカルアレイが私のプログラムをクラッシュさせるのですか?"](https://stackoverflow.com/questions/22945647/why-does-a-large-local-array-crash-my-program)あなたが気にしている場合は、現在ご覧になっているページの右上隅にある検索ボックスに '[cpp] large array crash'と入力するだけで検索できます。 – WhozCraig

+0

申し訳ありませんが、私は言及を忘れてしまった。私は既に動的配列としてそれを開始しようとしました。それでも同じエラーが発生します。他にも、配列をグローバルに定義するための提案がありました。うまくいきませんでした。 – Severus

+0

私は大きな長い答えを入力しようとしていましたが、配列の割り当てを動的に実行するコードの代替バージョンともっと多くの事実をあなたの質問に更新したことはないので、ここでお話します。あなたが(a)真実であると仮定し、実際にはこれを動的に試み、(b)それでも同じ問題が発生した場合、整数オーバーフローの問題であると考えています。未定義の動作。 'i * i'を与え、' j'が 'int'であることを自問してください.'I'の最大値は二乗でき、' INT_MAX'よりも下にありますか? – WhozCraig

答えて

-1

多分配列が大になります。 32ビットコンパイラには、最大サイズ(4 GB制限)の制限要因があります。

1.000.000 * 4バイト(32ビット)= 4.000.0000バイト

4.000.000バイト/ 1024/1024 =〜3.8 GB

関連する問題