2011-01-19 257 views
2

即使在最少的10個數字輸入,我也沒有錯誤,但我的代碼在運行時立即崩潰。我還想知道,如果我有一個類似於我已經問過的另一個問題的問題,但是又出現了另一個新問題,我該怎麼辦?代碼在運行後立即崩潰

#include <iostream> 
#include <cmath> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
using namespace std; 
int primer(int max); 
int main() 
{ 
    primer(5); 
    system("pause"); 
    return 0; 
} 

int primer(int max){ 
    vector<int> a; 
    a[1]=2; 
    for (int i=2;i<=max;i++){ 
     bool prime=true; 
     for (int ii=0;ii<a.size();ii++) { 
     if (i/a[ii]==floor(i/a[ii])) { 
     prime=false; 
     } 
     } 
     if (prime==true) { 
     a.push_back(i); 
     } 
    } 
    for (int iii=0;iii<=a.size();iii++) { 
    cout << a[iii] << endl; 
    } 
} 

我沒有得到任何錯誤,但編譯後的代碼立即崩潰。 我改成了

#include <iostream> 
#include <cmath> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
using namespace std; 
int primer(int max); 
int main() 
{ 
    primer(5); 
    system("pause"); 
    return 0; 
} 

int primer(int max){ 
    vector<int> a; 
    a.push_back(2); 
    for (double i=2;i<=max;i++){ 
     bool prime=true; 
     for (int ii=0;ii<a.size();ii++) { 
     if (i/a[ii]==floor(i/a[ii])) { 
      prime=false; 
     } 
     } 
     if (prime) { 
     a.push_back(i); 
     } 
     } 
    for (int iii=0;iii<=a.size();iii++) { 
     cout << a[iii] << endl; 
     return a.size(); 
    } 
} 

我解決了所有的你的問題。它仍然沒有返回錯誤,仍然崩潰。

+0

你需要發佈你得到的錯誤。你也不需要使用像`i`,`ii`和`iii`這樣的變量,尤其是所有代碼都是相同的。 – Falmarri 2011-01-19 23:16:38

+1

您是否嘗試調試它? – 2011-01-19 23:17:49

回答

1
vector<int> a; 
a[1]=2; 

,直到你預留空間,它無法訪問a[1]。您應該使用將2附加到a的末尾。

您已聲明primer返回int,但它不返回任何內容。要麼void或返回素數。

i/a[ii]==floor(i/a[ii])是不會做你期望的。 i/a[ii]執行整數除法。在劃分之前,你應該投idouble

if (prime==true)只能更改爲if (prime),不需要比較布爾值與true

請改善您的編碼風格。使用正確的縮進,更常用的變量名:ijk代替iiiiii

5

什麼讓你覺得你能做到這一點?

vector<int> a; 
a[1]=2; 
1

這裏是另一個錯誤:

for (int iii=0;iii<=a.size();iii++) { 
    cout << a[iii] << endl; 
    return a.size(); 
} 

我的理解是,你只能從return的函數一次,main包括在內。由於return聲明,執行不會循環。

你真的想在for循環中使用return聲明嗎?