【问题标题】:Code Crashes Immediately After Running代码运行后立即崩溃
【发布时间】:2011-01-19 23:15:13
【问题描述】:

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

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

【问题讨论】:

  • 你试过调试它吗?
  • 没有编译器错误? 真的???
  • 如果你遇到绊脚石,一个接一个这样。你需要读一本书。 stackoverflow.com/questions/388242/…
  • @TimeCoder:请将此视为建设性的批评,正如其本意。问题不在于您发布了许多相关的帖子。没关系。问题是您似乎对 C++ 没有基本的了解,并且您正试图通过在 SO 上发帖从头开始学习它。 “在 21 分钟内学会 C++ 编程”不是吗?我们希望您了解该语言。至少是基础知识。
  • @TimeCoder “我解决了你所有的问题。” - 不,你没有。

标签: c++


【解决方案1】:

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

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

【讨论】:

【解决方案2】:
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

【讨论】:

    【解决方案3】:

    这是另一个错误:

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

    我的理解是一个函数只能return一次,包括main。由于return 语句,执行不会在这里循环。

    您真的想要for 循环中的return 语句吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多