最近了解到一个有趣的bug,分享给大家。软件是vs_2022,x86环境。
#define _CRT_SECURE_NO_WARNINGS 1
#include
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;
}
大家想一想运行结果是什么呢?
结果是死循环。
我们可以发现,打印是 i ==12是明显越界访问了,而碰巧的是arr[12]的与 i 的地址相同,当arr[12]赋值0时,i也变成0,又再次进入循环中,周而复始,就变成死循环了。