代码在运行后立即崩溃

时间:2011-01-19 23:15:14

标签: c++

即使输入最少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();
    }
}

我解决了你所有的问题。它仍然没有返回任何错误,仍然崩溃。

3 个答案:

答案 0 :(得分:5)

是什么让你认为你能做到这一点?

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

答案 1 :(得分:1)

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

在为此预留空间之前,您无法访问a[1]。您应该使用a.push_back(2)将{2}添加到a的末尾。

您已声明primer返回int,但它没有返回任何内容。使其成为void或返回素数。

i/a[ii]==floor(i/a[ii])不会按预期执行。 i/a[ii]执行整数除法。您应该在分割之前将i强制转换为double

if (prime==true)可以更改为if (prime),无需将布尔值与true进行比较。

请改善您的编码风格。使用适当的缩进和更常用的变量名称:ijk而不是iiiiii

答案 2 :(得分:1)

这是另一个错误:

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

我的理解是,您只能return来自一个函数main。由于return语句,执行不会在此处循环。

您真的想在return循环中找到for语句吗?