2016-05-20 28 views
-1

我一直在嘗試在C++中實現Eratosthenes篩。我使用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