下面的程序的输出结构为死循环,着重分析一下原因
#include<stdio.h>
int main(){
int i=1;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
for(i=1;i<=12;i++){
printf("haha\n");
arr[i]=0;
}
return 0;
}


在分析之前我们要知道以下知识
1、可以理解内存是一块大的区域,该区域可分为静态方法区,堆区和栈区,局部变量的相关运算在栈区中进行
2、栈区可分为高地址内存和低地址内存,变量的存放基本遵从自上而下即从高地址到低地址的存放顺序
3、数组下标增长,地址由低到高
经过调试我们可以发现每次到arr[12]时,i会再次归零,所以程序会死循环,一直运行下去。
不同的编译器对越界的不同程度的处理时不一样的,具体详情可参考一些参考书,例如《C陷阱与缺陷》