当前位置:主页 > 软件编程 > C代码 >

C语言陷阱与缺陷之数组越界访问详解

时间:2022-11-07 09:38:32 | 栏目:C代码 | 点击:

1.问题引入

一道经典的笔试题来了,请做好准备!!!

试问以下代码在Visual studio 2019环境下执行结果?原因?

#include <stdio.h>
int main()
{
    int i = 0;
    int arr[10] = {0};
    for(i=0; i<=12; i++)
   {
        arr[i] = 0;
        printf("Hello World!\n");
   }
    return 0;
}

运行结果:

想不到吧为什么会造成死循环里???

疑惑鸭???

这样一个看似浅显的代码却存在一个大大的陷阱等着你,让我们一起来分析哈!

2、问题分析

(1)理论分析

很显然出现了数组越界访问但是为什么会造成死循环里???

首先我们知道局部变量在存在栈区中,存储方式为先使用高地址再使用低地址,然而数组存储方式开辟一块地址然后地址由低到高依次存储。

这样在越界访问时可能会导致问题!!!

数组越界访问到Arr[12]会改变i的值导致了死循环哈!!!

(2)调试验证

由此可见i的地址和arr[12]的地址是一样的,这样在数组越界访问中在修改arr[12]的值时把i的值改掉了,之后每次循环到此处都产生同样的结果造成了死循环哈!!!

总结

您可能感兴趣的文章:

相关文章