2011-01-19 114 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声明吗?