Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98160
  • 博文数量: 29
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-07 15:10
文章分类

全部博文(29)

文章存档

2011年(1)

2008年(28)

我的朋友

分类: C/C++

2008-09-17 10:58:51

观察下面程序,死循环???
 

#include <stdio.h>
int main(void)
{
  int i = 0;
  int name[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  for (i = 0; i <= 10; i++)
  {
    name[i] = 0;
    printf("ok\n");
  }
  return 0;
}

-----------------------------------------------------------------------------------

看到的第一反应就是,for循环里面数组越界了,应该为i<10; 运行该错误的程序,会发现是死循环.....

原因: 在VC6.0下按F11, 跟踪&i 和 &name[10]的值,会发现两者相等,也就是说,编译器先分配变量i的空间,然后再分配name数组的空间,两者的栈空间是紧邻的,即name[0]--name[9]为数组name的空间,name[10]的地址其实就是i的地址,当循环至name[10]=0时,其实也将i的值改为了0,从而又回到i=0重新执行,故会出现死循环.

阅读(984) | 评论(0) | 转发(0) |
0

上一篇:一道小题

下一篇:C__汇编代码

给主人留下些什么吧!~~