首页 > 解决方案 > 退出,分段错误

问题描述

该问题的输入是第一个数字,表示将输入多少案例进行分析。

输入:

3
8 12
9 27
259 111

第一个数字表示将有 3 个案例。接下来的 3 行是案例。程序必须输出 3 个案例的 GCD(最大公约数)。

4
9
37

我编写的代码如下所示:

#include <iostream>
#include <vector>

int gcd(int a, int b) {
   if (b == 0)
      return a;
   return gcd(b, a % b);

}

int main() {

   int N;

   std::cin >> N;

   int i = 0;

   std::vector<int> cards;

   while (i <= N) {
      i++;
      int F1, F2;
      std::cin >> F1 >> F2;
      cards[i] = gcd(F1, F2);
   }

   for (int j; j <= N; i++) {
      i++;
      std::cout << cards[i] << "\n";
   }
}

它读取第一个整数(测试用例的数量),运行一次循环(读取一个测试用例)并停止运行。终端输出exited, segmentation fault。问题是什么?

标签: c++c++11c++14c++17

解决方案


在您的代码中存在一些问题,首先您没有设置向量的大小,结果就像它的长度为 0。

另一个错误是循环;事实上,在执行所有其他操作之前,首先将 i 加 1,这样您将从向量的第二个分量开始插入(向量从 0 开始索引)。

在第二个循环中也存在一些问题,例如,您声明了一个变量 j 它完全没用,因为在以下操作中您仍然使用 i (设置在前一个循环的结束值,while 一个)。

尝试纠正这些事情并理解它,这样你也会理解错误的原因,这在 C++ 中很常见。

我希望我对你有所帮助:)


推荐阅读