为什么以下代码在printf()
到达i
之前有效(14
执行)?实际上,当i
超过数组的第10个元素时,执行应该失败,不是吗?我甚至写道:
for(i=0; i<100; i++)
我当然仍然会遇到分段错误,但所有值都会打印出来。
#include <stdio.h>
void funcX() {
int i;
int array[10];
printf("\tEntering funcX()\n");
//for(i=0; i<11; i++) { //This works
//for(i=0; i<12; i++) { //This works
//for(i=0; i<13; i++) { //This works
for(i=0; i<14; i++) { //***This fails****
array[i]=i;
printf( "array[i]= %d\n", array[i] );
}
printf("\tLeaving funcX()\n");
}
int main(int argc, char** argv) {
printf("Calling funcX() from main()\n");
funcX();
printf("Returning from funcX()\n");
return(0);
}
使用gcc -m32
在RH Linux上编译。
答案 0 :(得分:3)
执行
for(i=0; i<14; i++) {
且值i
等于10
,您通过访问越界内存[array[i]
]来面对undefined behavior,结果其中, undefined 。 其中一个副作用是分段错误。它不是必须。