请问数组越界后的处理
int s;
int x[5];
for(s=0;s<=5;s++)
{
x[s] = 2*s;
printf("%d: s:%d\n",s,x[s]);
}
执行完成过后s变为11,请各位帮忙分析一下,谢谢
[解决办法]
我这里的输出结果是
0: s:0
1: s:2
2: s:4
3: s:6
4: s:8
10: s:1
这个输出的方式有点不好,看上好根本不是逻辑上的意思,应该把 printf("%d: s:%d\n",s,x[s]); 改为
printf("s:%d\tx[%d]:%d\n",s,s,x[s]);
结果是:
s:0 x[0]:0
s:1 x[1]:2
s:2 x[2]:4
s:3 x[3]:6
s:4 x[4]:8
s:10 x[10]:1
当s=5时,x[5]已经越界,然后这里x[5]对应的位置正好是s的位置,你可以打印一下x[5]和s地址,会发现是一样的,也就是说x[5]就是s 那么当s=5时的情况是 s=2*s;于是s=10;前面的10是这么来的,后面输出的x[s]的值,因为此时x[s]是x[10],已经不知道越界越到哪里去了,正好值是1;
如果出了循环再打印一些s,哪里此时s因为++变成了11;