数组越界

1593阅读 0评论2012-11-08 XylDll
分类:

C编译器对数组越界不做检测,也就是数组越界后编译器不会给程序员报错,如果编译器对数组越界
做检测,那就解脱了程序员,不用当心数组越界,但肯定会付出一定的代价。而数组越界往往会出现
不可预知的问题。所以程序员时刻要小心数组是否越界。

下面是一道笔试题。考查数组越界。

在32Bit系统下,如下代码的运行结果是什么:
int main(){                                                        
    int i;
    int a[10];
    for (i = 0; i <= 10; ++i)
    {    
        a[i] = 0;
        printf(“%d\n”, i);
    }
   exit(0);    
}

如果你不仔细分析可能说结果是:
0
1
2
3
4
5
6
7
8
9
10

其实,这种分析理论上有一定的道理,但运行的结果并不是这。
运行的结果是个死循环。

该还考察了局部变量在栈上是怎么存放的。
i
a[9]
a[8]
a[7]
a[6]
a[5]
a[4]
a[3]
a[2]
a[1]
a[0]
栈的方向是从上到下的,当程序执行a[10]=0的时候实际上等效于执行i=0
所以程序的结果出现死循环。

上一篇:C与C++内存机制的不同
下一篇:win7创建IIS之web服务器