【问题标题】:Error: Exit Code 134 while executing a c++ program for a specific input错误:为特定输入执行 c++ 程序时退出代码 134
【发布时间】:2022-09-27 23:59:45
【问题描述】:

我的代码没有为像这样的输入运行

6
1 2 3 4 5 6 7

但它正在运行其他输入,如

7
1 2 3 4 5 6 7 8

当我为前一个输入运行程序时,它显示退出代码 134 但是当我为后面的输入运行时,它可以按预期与输出一起正常工作。

#include <limits.h>
#include <iostream>

using namespace std;

int helper(int* arr, int n, int pos) {
  int r = pos + 2, l = pos - 2, ans = 0;
  while (r <= n) {
    ans += arr[r] * arr[r - 1] * arr[pos];
    r++;
  }
  while (l >= 0) {
    ans += arr[l] * arr[l + 1] * arr[pos];
    l--;
  }
  if (pos != 0 && pos != n) ans += arr[pos] * arr[0] * arr[n];
  return ans;
}
int matrixChainMultiplication(int* arr, int n) {
  int ans = INT_MAX;
  for (int i = 0; i <= n; i++) {
    ans = min(ans, helper(arr, n, i));
  }
  return ans;
}

int main() {
  int n;
  cin >> n;
  int* arr = new int[n];

  for (int i = 0; i <= n; i++) {
    cin >> arr[i];
  }

  cout << matrixChainMultiplication(arr, n);

  delete[] arr;
}
  • 当您使用调试器运行它时,它是什么第一的它做错了什么?
  • 退出代码 134 表示程序被 SIGABRT 信号中止。
  • 你的程序的目的是什么?它有什么作用?
  • 当我运行您的代码时,您似乎在helper() 中有缓冲区溢出。
  • 当使用调试器并且程序的执行在调用 matrixChainMultiplication 函数后返回到主函数时,它会显示 SIGABRT 信号。

标签: c++ exit-code


【解决方案1】:

您的代码以代码 134 退出,这意味着它收到了 SIGABRT 信号。调试您的代码后,我发现您有多个缓冲区溢出。问题是你试图访问一个数组的长度索引来获取最后一个元素,如下所示:arr[n] 如果narr 的长度。问题是数组从索引 0 开始,因此要获取最后一个元素,您必须使用 arr[n-1]

要记住的另一件事是循环数组使用&lt;=,而不是&lt;。这也是因为数组从 0 开始。

这是修复了缓冲区溢出的代码:

#include <limits.h>
#include <iostream>

using namespace std;

int helper(int* arr, int n, int pos) {
  int r = pos + 2, l = pos - 2, ans = 0;
  while (r < n) {
    ans += arr[r] * arr[r - 1] * arr[pos];
    r++;
  }

  while (l >= 0) {
    ans += arr[l] * arr[l + 1] * arr[pos];
    l--;
  }

  if (pos != 0 && pos != n) {
    ans += arr[pos] * arr[0] * arr[n - 1];
  }
  return ans;
}

int matrixChainMultiplication(int* arr, int n) {
  int ans = INT_MAX;
  for (int i = 0; i < n; i++) {
    ans = min(ans, helper(arr, n, i));
  }
  return ans;
}

int main() {
  int n;
  cin >> n;
  int* arr = new int[n];

  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }

  cout << matrixChainMultiplication(arr, n);

  delete[] arr;
}

【讨论】:

  • 如果此答案解决了您的问题,那么您可以将其标记为正确,以帮助将来遇到相同问题的其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多