目录
  • 1.问题引入
  • 2、问题分析
    • (1)理论分析
    • (2)调试验证
  • 总结

    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;
    }

    运行结果:

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

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

    疑惑鸭???

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

    2、问题分析

    (1)理论分析

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

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

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

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

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

    (2)调试验证

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

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

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!  

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。