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,
也就是数组越界就会和变量的地址重合,挺危险的。。。