我已经刷过我的C编码,并且重复了几年前做过的一些旧练习。我遇到了一种情况,我几乎100%确定它应该给出一个分段错误,但是程序运行顺利并且正确终止。为什么会这样?
#include <stdio.h>
int main(void){
int vals[6] = {0,0,0,0,0,0};
vals[8]++; //This should not be ok!!?
printf("Done");
return 0;
}
答案 0 :(得分:4)
vals[8]
的行为未定义。
它等同于*(vals + 8)
解除引用数组范围之外的内存。
A&#34;分段错误&#34;是可能发生的许多事情之一。编译器也可以吃你的猫。