
C语言关于栈区溢出的问题!!!某公司曾笔试问题
发布日期:2023-09-14 13:18:44
浏览次数:4
分类:技术文章
本文共 667 字,大约阅读时间需要 2 分钟。
曾经某公司校招笔试时曾出过的相关类型的题:
这段代码在编译时,会出现什么问题呢?原因是什么?
#includeint 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 bit\n"); } return 0;}
1.这段代码会在运行时,出现死循环的问题。
因为数组大小是10,有10个数字,而循环需要导出的数组大小为12,这样数组11和数组12的数字在内存中是并不存在的。详情请先看图片
从图片来说,数组arr和i 都是作为变量存储在栈区中。因为在编译器中存储变量习惯是从高地址往低地址给变量开括地址,但由于数组内的内容是下标从小到大,地址也是从低到高。这样就会导致最终多余出的数组内容会超出编译器本来给数组扩充出来的地址,最终接触到变量 i 的地址,由于这题是在VS2022,debug,x86的状态下编译,所以在arr[12]的时候数组接触到 i 变量的地址,并且将其覆盖,此时 i 变量 和 arr【12】变成同一个变量,在循环将arr[12]变为0的同时,i 也 变为0,
这样就导致了循环一直重复导致了死循环。
2.在不同编译器下,这个变量的储存位置是不同的
这里是在VS2022,debug,x86的情况下进行编译的,但如果在不同的编译器中,这个数值会改变,但总体的解释是不变的
转载地址:https://blog.csdn.net/a1275174052/article/details/132041024 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2023年09月16日 13时46分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java SE 8编程基础考试参考解答
2019-03-07
基于MySQL关系型数据库的基础开发考试
2019-03-07
Vuex 数据增加
2019-03-07
MySQL复习03-分页查询+小结
2019-03-07
MySQL复习08-级联删除置空、存储过程和函数
2019-03-07
简单的Android图片格式转换
2019-03-07
Fragment使用相关博客推荐
2019-03-07
Android获取一个文件md5(不下载)
2019-03-07
FloatingActionBar发生错误
2019-03-07
thymeleaf判断对象是否为空的相关逻辑处理
2019-03-07
关于RabbitMQ的几种工作模式
2019-03-07
网站添加页面热力图--百度统计
2019-03-07
性能实战之MySQL索引优化
2019-03-07
AQS中可重入锁ReentrantLock源码一加锁过程
2019-03-07
机器学习9:关于pytorch中的zero_grad()函数
2019-03-07
机器学习10:如何理解随机梯度下降
2019-03-07
图像处理18:传统图像降噪算法综述
2019-03-07
python3.1:基础语法:变量和简单数据类型
2019-03-07
编程基础2:C++/Linux/C教程
2019-03-07
pycharm“out of memory”的解决方法
2019-03-07