c 地址越界,死循环初探

 1 int main()
 2 {
 3    
 4   int i,a[10];
 5   int y ;
 6   for(i = 0; i < 10; i++){
 7       a[i] = 1;
 8       printf("&a[%d]= %x\n", i,&a[i]);  
 9   }
10     printf("&i = %x\n", &i);  
11     return 0;
12 }

 

执行结果

&a[0]= 19392bf0
&a[1]= 19392bf4
&a[2]= 19392bf8
&a[3]= 19392bfc
&a[4]= 19392c00
&a[5]= 19392c04
&a[6]= 19392c08
&a[7]= 19392c0c
&a[8]= 19392c10
&a[9]= 19392c14
&i = 19392c18

看到了吧 &a[10] 的地址就会和 &i 重合,如果数据越界赋值的话,就会死循环。

死循环代码

 1 int main()
 2 {
 3    
 4   int i,a[10];
 5   int y ;
 6   for(i = 0; i <= 10; i++){
 7       a[i] = 1;
 8       printf("&a[%d]= %x\n", i,&a[i]);  
 9   }
10     printf("&i = %x\n", &i);  
11     return 0;
12 }

执行结果

&a[0]= 12d4b3e0
&a[1]= 12d4b3e4
&a[2]= 12d4b3e8
&a[3]= 12d4b3ec
&a[4]= 12d4b3f0
&a[5]= 12d4b3f4
&a[6]= 12d4b3f8
&a[7]= 12d4b3fc
&a[8]= 12d4b400
&a[9]= 12d4b404
&a[1]= 12d4b3e4
&a[2]= 12d4b3e8
&a[3]= 12d4b3ec
&a[4]= 12d4b3f0
&a[5]= 12d4b3f4
&a[6]= 12d4b3f8
&a[7]= 12d4b3fc
&a[8]= 12d4b400
&a[9]= 12d4b404
&a[1]= 12d4b3e4
&a[2]= 12d4b3e8
&a[3]= 12d4b3ec
&a[4]= 12d4b3f0
&a[5]= 12d4b3f4
&a[6]= 12d4b3f8
&a[7]= 12d4b3fc
&a[8]= 12d4b400
&a[9]= 12d4b404

就这样循环下去。。。

 

&a[10]的地址和i重合,

i++ 到10 时 ,被复制为1,

也就是数组越界就会和变量的地址重合,挺危险的。。。

 

posted @ 2017-09-04 17:21  蜗牛码  阅读(350)  评论(0编辑  收藏  举报