最近我在学习C语言时碰到一个很有趣的问题,在翻阅了一些大佬的文章后对该问题成因有了一些大概的了解。我觉得这个问题很有参考意义,于是便编写了这篇文字,希望能帮到其他正在学习C语言的同学们。
具体情况如下:
代码:
#define _CRT_SECURE_NO_WARNINGS
#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,c\n");
}
return 0;
}
运行结果:
执行这段代码后,程序将陷入死循环,不断打印 “hello,c” 。
先说结论,这个问题是因为 越界访问数值,访问到并修改了 i 值而导致的。
以下是详解:
我们通过VS调试模式的监控器可以看到,i 的地址与arr[12]的地址是相同的: