死循环代码
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i = 0;i<=12;i++)
{
arr[i] = 0;
printf("hehe\n");
}
return 0;
}
编译器VS2019 X86环境
死循环原因
i和arr数组都是局部数据是放在栈区的
1.栈区内存使用的习惯是:先使用高地址,再使用低地址
2.数组随着下标的增长,地址是由低到高变化的
那么就可以知道i的地址是高于arr数组的地址的
3.如果i和arr之间有适当的空间,利用数组的越界访问就可能覆盖到i,
进而导致死循环(不同的编译器内存的分配方式可能不同,而在VS2019 X86 是两个整型的空间间隔)
如图
当越界访问到arr[12]的地址的时候,发现arr[12]和i的地址是相同的,
此时改变arr[12]为0,i也就为0,死循环…