C++ 编译时出错:错误-[由于信号终止:中止陷阱(6)]

C++ 编译时出错:错误-[由于信号终止:中止陷阱(6)],c++,arrays,for-loop,undefined-behavior,C++,Arrays,For Loop,Undefined Behavior,编译时出错:错误-[由于信号终止:中止陷阱(6)] #包括 使用名称空间std; int main() { int j,r=2,p=1; int v[8]; 对于(j=0;j

编译时出错:错误-[由于信号终止:中止陷阱(6)]

#包括
使用名称空间std;
int main()
{
int j,r=2,p=1;
int v[8];
对于(j=0;j<8;j++)
{
v[j-p]=3*j-r;
p=-p;
r=r-p;
}
对于(j=0;j<8;j++)

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


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

至少这句话是这样的

v[j - p] = 3 * j - r;
调用未定义的行为,因为当
j
等于
0
p
等于
1
j
等于
7
p
等于
-1
时,有人试图访问数组以外的内存。在这些情况下,您将获得索引
-1
d
8
对于数组
v
无效


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

当j=0时,您认为会发生什么?您使用的编译器是什么?您是如何编译此代码的?它在这里编译的:也许您正在成功编译并出现运行时错误?@RetiredNinja它是CodeRunner,这里是@xluci.fr您的评论没有那么清楚,是吗如果您更正了代码,仍然会发生这种情况,比如使用
for(j=1;j<8;j++)
?而不是
j=0
?尝试使用调用的as
g++-Wall-Wextra-g
v[j - p] = 3 * j - r;