超出范围时,C数组赋值有效

时间:2015-01-26 13:33:45

标签: c arrays

为什么以下代码在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上编译。

1 个答案:

答案 0 :(得分:3)

执行

for(i=0; i<14; i++) { 

且值i等于10,您通过访问越界内存[array[i]]来面对undefined behavior,结果其中, undefined 其中一个副作用是分段错误。它不是必须