C语言陷阱与缺陷之数组越界访问详解
目录
- 1.问题引入
- 2、问题分析
- (1)理论分析
- (2)调试验证
- 总结
1.问题引入 一道经典的笔试题来了,请做好准备!!!
试问以下代码在Visual studio 2019环境下执行结果?原因?
#include 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)理论分析
很显然出现了数组越界访问但是为什么会造成死循环里???
首先我们知道局部变量在存在栈区中,存储方式为先使用高地址再使用低地址,然而数组存储方式开辟一块地址然后地址由低到高依次存储。
文章图片
这样在越界访问时可能会导致问题!!!
数组越界访问到Arr[12]会改变i的值导致了死循环哈!!!
(2)调试验证
文章图片
由此可见i的地址和arr[12]的地址是一样的,这样在数组越界访问中在修改arr[12]的值时把i的值改掉了,之后每次循环到此处都产生同样的结果造成了死循环哈!!!
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- java理论基础Stream元素的匹配与查找
- R语言和Python用泊松过程扩展(霍克斯过程Hawkes|R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列)
- Python编程语言|Python学生通讯录管理系统案例(文件版)
- C语言实现宿舍管理系统设计
- C语言|C语言 Freertos的递归锁详解
- 防抖与节流
- 由|由 Figma 封停大疆,看国产 IDE 如何应对与突围()
- 分析服务(以数据量化渠道投放成本与转化效果)
- java基础|Java方法重写与重载的区别
- 数据结构与算法|数据结构学习笔记 1-1链表概述及LeetCode真题图解(Java)