今天来结合上次写的一篇文章《函数栈帧的创建和销毁(底层)》来结合讨论一下一个有关数组越界访问的题目,这道题曾经面试题出过,值得研究。
首先题目是:以下这段代码输出的结果是什么,哪里出现问题了,怎么解决?
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hehe\n");
}
return 0;
}
首先先把程序运行以下观察结果:
结果发现程序死循环了,有的同学可能立刻就说出了其中的原因,但是对于一个初学者来说,可能并没有大家的思维那么敏捷,假如摆在面前的是一段更复杂的代码,那么肉眼是不可能那么快能排查出来其中的错误的,那么怎么才可以循序渐进的来排查呢,接下来我们就会用到调试来解决这个问题。
按下F10进入调试页面: