当前位置:首页 » 《随便一记》 » 正文

一道2016年nice的校招笔试题引发的思考_m0_57304511的博客

7 人参与  2022年05月07日 15:07  分类 : 《随便一记》  评论

点击全文阅读


目录

声明

原题

题目详细解析

运行结果:

题目解析:

结论1:

注意点1:

注意点2:

 结论2:

 注意点3:

注意点4:

注意点5:


声明

今天的题,并非是完全出自于nice的笔试原题,今天的这道题出自于《C陷阱和缺陷》,只是两道题有异曲同工之妙!

原题

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

问题:这段代码在vs2019上会出现什么现象?这种现象是由什么原因造成的?我们应该如何避免像这样的问题?

题目详细解析

运行结果:

出现了死循环,即在屏幕上不停的打印"hehe"。

题目解析:

(1)i和arr是局部变量,放在栈区上

(2)栈区上的使用习惯:先使用高地址处的空间,再使用低地址处的空间

(3)数组随着下标的增长,地址是由低到高变化的

由这三点可以画出这段程序的内存图来,当然,这还要区分具体的编译器!

结论1:

arr[12]与变量i占用的是同一块空间,即地址值一样 

如果arr和i之间的空间合适的话,就有可能使用的arr数组向后越界访问到了i,造成循环变量i的改变,最终死循环。

注意点1:

这个代码是严格依赖环境的,例如vc 6.0 中i和arr是连续的,在gcc编译器中,i和arr之间有一个空间。

注意点2:

虽然此程序越界访问了,但是由于程序进入了死循环,所以不会报错,但是一旦把i<=12改成了i<=11,程序就会在i=11的地方会停止下来,此时已经构成了越界访问,程序自然会报错。如下图所示:

 结论2:

死循环会掩盖程序中的某些错误,比如数组越界访问。

 注意点3:

当把int i = 0;与int arr[10] = {0};交换之后,程序将不会出现死循环,但是程序的越界访问报错是少不了的。

注意点4:

此时也应该注意一下debug与release版本的区别:

很明显,在debug版本下,i的地址值比arr[9]的要大,而在release版本下,i的地址要比arr[9]的地址值要小,在release版本下进行了某些优化,即杜绝了我们上述出现的死循环的情况,在这种情况下,即使数组越界,也不会影响到i的值。

注意点5:

这种优化是无差别的,即无论你的代码是否越界,都会进行这样的优化。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/39674.html

越界  程序  循环  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 完结文毁容的姐姐和瞎眼的我离开后,姜家两兄弟悔哭了+后续列表_完结文毁容的姐姐和瞎眼的我离开后,姜家两兄弟悔哭了+后续(林梦婉)
  • 妻子辱我爸受贿自杀,我掏出一等军功章节选推荐_[陈素云辰朋友]小说精彩章节分享
  • 全书浏览苔藓爬满旧日诺言新上(顾砚廷慕晚夏)_苔藓爬满旧日诺言新上(顾砚廷慕晚夏)全书结局
  • 顾尘傅雅宁(神女老婆,却在背地承欢作乐+后续+结局)结局_(顾尘傅雅宁神女老婆,却在背地承欢作乐+后续+结局全书结局)结局列表_笔趣阁(顾尘傅雅宁)
  • 「老婆怀上助理的孩子后,助理要求我净身出户」章节限时抢先看‌_「黄秋雅秋雅姐刘嘉铭」后续完结版
  • 此去经年人未还,沈青禾霍沉洲_此去经年人未还,沈青禾霍沉洲
  • 我爸娶了九十九个媳妇都死了,这次准备娶我的女同学小说精彩章节免费试读_[小梅娶媳妇孤儿]全文免费在线阅读
  • 此去经年人未还结局+番外文章简述(沈青禾霍沉洲)列表_此去经年人未还结局+番外文章简述
  • 完结文寻你寻不到归期结局+完结列表_完结文寻你寻不到归期结局+完结(姜昭意盛西)
  • 江以蓁的潮起时问归期高分佳作江以蓁秦司礼全书在线
  • 「亲手逼死儿子后,男人悔不当初」后续全文免费阅读_[傅司衍轩轩佳佳]最新章节免费阅读
  • (番外)+(全书)寻你寻不到归期+后续+结局(姜昭意盛西辞)全书在线_寻你寻不到归期+后续+结局免费列表_笔趣阁(姜昭意盛西辞)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1