我们来看一个简单的程序:
#include <stdio.h>
#include <windows.h>
int main(){
int i = 0;
int arr[10] = {0};
for (i = 0; i <=12; i++){
arr[i] = 0;
printf("hehe\n");
}
system("pause");
return 0;
}
在VS2013中运行后发生了死循环,不断打出 “hehe” ,这是一个奇怪的现象,我们发现在for循环中,i在不断的更新,按理来说虽然数组访问越界,但是不会出现死循环现象,下面来分析一下这个问题。
出现死循环了,首先我们可以判断出i一定没有满足for循环的退出条件,即i一直处于i<=12的状态。
此时点击F10开始调试程序,在点击F11,往下走,完成对i和arr[10]数组的赋值,在依此点击 调试 窗口 内存,打开内存,输入&i:
我们发现i的地址为 0x0039FCEC ,在输入arr:
arr数组元素的首地址为0x0039FCBC,这时数组越界访问后,arr[12]恰好就是i。 这样的话就知道了问题所在,for循环中i=12的时候,把arr[12]置为0,就相当于把i置为0,那么i的值永远就不会大于12了,所以出现了死循环。