越界访问内存造成死循环的原因:
首先:
我们了解到,内存空间分为“栈区,堆区,静态区”。而栈区内存的使用习惯为:“先使用高地址处的空间,再使用低地址处的空间”。
我们还知道数组会随着下标的增长,地址由低到高。
下面的程序会出现什么问题?运行结果是什么?
#include <stdio.h>
int main()
{
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hello bit\n");
}
return 0;
}
运行结果:
越界访问内存,导致死循环的打印“hello bit”
为什么呢 ?
一开始数组arr的值,如图所示:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/27ef0da4e8789d7c97847c816f6faecf.png#pic_center)
随着程序的运行,数组arr被重新赋值为0,如下图:
接下来,重头戏,看图:
注意:i与arr之间的空格为2个字节,实在VS2019、VS2022的环境下为2个字节,其他环境下是有所变化的。
通过上述了解分析,我们知道了程序越界访问造成死循环的原因,如有没讲到的,还请指点指点我(我需要你的鼓励)。