这篇文章主要为大家详细介绍了C语言的数组越界访问,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
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;
}
运行结果:
想不到吧为什么会造成死循环里???
疑惑鸭???
这样一个看似浅显的代码却存在一个大大的陷阱等着你,让我们一起来分析哈!
2、问题分析
(1)理论分析
很显然出现了数组越界访问但是为什么会造成死循环里???
首先我们知道局部变量在存在栈区中,存储方式为先使用高地址再使用低地址,然而数组存储方式开辟一块地址然后地址由低到高依次存储。
这样在越界访问时可能会导致问题!!!
数组越界访问到Arr[12]会改变i的值导致了死循环哈!!!
(2)调试验证
由此可见i的地址和arr[12]的地址是一样的,这样在数组越界访问中在修改arr[12]的值时把i的值改掉了,之后每次循环到此处都产生同样的结果造成了死循环哈!!!
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程学习网的更多内容!
沃梦达教程
本文标题为:C语言陷阱与缺陷之数组越界访问详解


猜你喜欢
- ubuntu下C/C++获取剩余内存 2023-09-18
- C语言详解float类型在内存中的存储方式 2023-03-27
- C++ 数据结构超详细讲解顺序表 2023-03-25
- Qt计时器使用方法详解 2023-05-30
- C语言qsort()函数的使用方法详解 2023-04-26
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Easyx实现扫雷游戏 2023-02-06