C语言关于栈区溢出的问题!!!某公司曾笔试问题
发布日期:2023-09-14 13:18:44
浏览次数:26
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年09月24日 14时39分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
160809308周子济第六次作业
2019-06-07
sublime text3最新版本注册码(build 3143)
2019-06-07
linux使用技巧
2019-06-07
必背公式及常数
2019-06-07
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2019-06-07
js时间戳转时间格式
2019-06-07
Nginx配置文件nginx.conf中文详解(总结)
2019-06-07
Linux的用户态和内核态
2019-06-07
JavaScript原生错误及检测
2019-06-07
为什么写作
2019-06-07
整数子数组求最大和添加验证
2019-06-07
使用kubeadm安装Kubernetes
2019-06-07
Principal Component Analysis 主元分析
2019-06-07
linux分割字符串操作
2019-06-07
PHP学习2
2019-06-07
多实例Mysql配置
2019-06-07
linux下安装Mongodb
2019-06-07
hdu4348区间更新的主席树+标记永久化
2019-06-07