为什么这段代码直到1011之前一直打印出b [index]:0,直到1012才开始产生垃圾?
int b[10];
for(int i=0; i<1025; i++){
printf("b[%d]: %d\n", i, b[i]);
}
我得到的输出是:
b[0]: 0
b[1]: 0
...
b[1011]: 0
b[1012]: 1376789009
b[1013]: 0
b[1014]: 2036613137
答案 0 :(得分:2)
您的数组只能容纳10个元素,但是您尝试访问超出该范围的元素。 C没有任何类型的边界检查来确保您不会这样做。相反,您得到的是undefined behavior,这意味着您无法预测程序的行为。还要注意,值0与可能打印的任何其他值一样多。
此外,由于b
未初始化,因此它包含的10个元素的值不确定。它们可以为0,也可以完全为其他值。如果这些值恰好具有陷阱表示,那么在这种情况下,您也可能触发未定义的行为,尽管您不太可能在现代系统上遇到这种情况。