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



编译时出错:错误-[因信号终止: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时,您将在v[-1]中写入,数组没有负索引。

也就是说,您的代码中没有任何内容可以阻止它进行编译。

至少这个语句

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

调用未定义的行为,因为当例如j等于0p等于1时或者当j等于7p等于-1时。在这些情况下,您将获得对数组v无效的索引-18

因此,程序在运行后中止。

最新更新