#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {0};
for(i=0; i<=12; i++)
{
arr[i] = 0;
printf("hehe\n");
}
return 0;
}
研究程序死循环的原因:
解释:代码中先创建i再创建arr,又因为arr和i又是局部变量放在栈上,而栈的使用习惯是先使用高地址的空间再使用低地址的空间,所以可以画出如上的布局,又因为随着数组下标的增长地址逐渐变大,如果在内存分配时i和arr中间恰好相差2个空间,则向后越界后可能会使i和arr的地址一致。
1.这个题目依赖于环境:
例如:VC6.0中,arr数组与i中间没有空间
gcc中,i和arr数组间空出一个整型
2.
![]()
release版本会对代码进行优化,当在release版本中,编译器自动把代码转换为
int main() { \* int arr[10] = { 0 }; int i = 0; *\ for (i = 0; i <= 12; i++) { arr[i] = 0; printf("hehe\n"); } return 0; }