#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = { 1 };
for (i = 0; i <= 15; i++)
{
arr[i] = 0;
printf("Hello\n");
}
return 0;
}
定义了一个10个元素的数组,但是循环15次,在32位环境下会导致死循环,不停地输出“Hello”。
这是内存存储的问题
局部变量存储在栈区,32位环境下,先使用高地址,后使用低地址,数组随着下表增长,地址由低到高,如果arr和i之间又多余空间,如果arr越界,就有可能覆盖到i,在覆盖的内存空间就会不停地被置为0,导致死循环。
但是arr与i之间有多少空间由编译器决定,不同的编译器,两者之间的空间不同,VS2022两者之间的空间为2,如果把i的定义放在arr后面就不会出现死循环的情况
但是在64位环境下,内存从低到高使用,和32位环境下的情况刚好相反,i如果在arr后面定义的话,如果数组越界就可能会出现死循环的情况