死循环的函数
#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;
}
原由
函数中声明的局部变量是在栈区中存储的。
栈区在使用时,优先使用高地址的空间,再使用低地址的空间。
int i = 0;
会在main函数在栈区的空间内声明一块空间,在声明创建一个变量后,会空出一定大小的内存空间的内存。因编译环境的不同,所空出的空间的大小也是未知的。
int arr[] = {1,2,3,4,5,6,7,8,9,10};
函数开始声明arr数组 ,arr数组共有10个int类型的变量。
数组在使用空间时,优先使用低地址空间。
故内存中的分布如图所示
for(i=0; i<=12; i++)
{
arr[i] = 0;
printf("hello bit\n");
}
进入循环后,开始对arr[i]的变量赋值为0
当 i > 9 以后,便已经超出了arr数组声明的空间,为越界访问。
arr[10] arr[11] arr[12]
存在一种可能,变量i与数组arr[9]之间的内存空间小于两个int类型变量的大小。
当arr[i]进行越界访问时将变量i赋值为0;
导致for循环中的 i <=12 的限制条件失去控制效果,开始死循环。