【问题标题】:Error while compiling: The error - [Terminated due to signal: ABORT TRAP (6)]编译时出错:错误 - [因信号终止:ABORT TRAP (6)]
【发布时间】:2021-07-22 04:32:49
【问题描述】:

编译时出错:错误 - [因信号终止:ABORT TRAP (6)]

#include <iostream>

using namespace std;
int main()
{
    int j, r = 2, p = 1;
    int v[8];
    for (j = 0; j < 8; j++)
    {
        v[j - p] = 3 * j - r;
        p = -p;
        r = r - p;
    }
    for (j = 0; j < 8; j++)
        cout << v[j] << " ";
}

【问题讨论】:

  • 当 j = 0 时你认为会发生什么?
  • 您使用的是什么编译器以及如何编译此代码?它在这里编译:ideone.com/r4CyuA也许你编译成功并且出现运行时错误?
  • @RetiredNinja 是 CodeRunner,这里是 link
  • @xluci.fr 您的评论并没有说明一切,如果您更正代码,例如使用for (j = 1; j &lt; 8; j++),它仍然会发生吗?而不是j = 0?
  • 尝试使用GCC 编译为g++ -Wall -Wextra -g

标签: c++ arrays for-loop undefined-behavior


【解决方案1】:

您的程序调用未定义行为,当j 为0 时,您将写入v[-1],数组没有负索引。

也就是说,您的代码中没有任何东西可以阻止它编译。

【讨论】:

    【解决方案2】:

    至少有这个说法

    v[j - p] = 3 * j - r;
    

    调用未定义的行为,因为当j 等于0p 等于1j 等于7 时,尝试访问数组之外​​的内存并且p 等于-1。在这些情况下,您将获得对数组 v 无效的索引 -18

    所以程序在运行后就被中止了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多