C++ 编译时出错:错误-[由于信号终止:中止陷阱(6)]
编译时出错:错误-[由于信号终止:中止陷阱(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
#包括
使用名称空间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
d8
对于数组v
无效
因此,程序在运行后被中止。当j=0时,您认为会发生什么?您使用的编译器是什么?您是如何编译此代码的?它在这里编译的:也许您正在成功编译并出现运行时错误?@RetiredNinja它是CodeRunner,这里是@xluci.fr您的评论没有那么清楚,是吗如果您更正了代码,仍然会发生这种情况,比如使用for(j=1;j<8;j++)
?而不是j=0
?尝试使用调用的asg++-Wall-Wextra-g
v[j - p] = 3 * j - r;