Chinaunix首页 | 论坛 | 博客
  • 博客访问: 913454
  • 博文数量: 119
  • 博客积分: 2493
  • 博客等级: 大尉
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-03 14:00
文章分类

全部博文(119)

文章存档

2013年(19)

2012年(100)

分类: LINUX

2012-10-29 09:31:17

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
所以程序的结果出现死循环。

阅读(3648) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~