栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++数组越界问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++数组越界问题

C++数组越界
  • 内存地址分配
  • 数组时间复杂度
  • 访问越界问题

内存地址分配

计算机中会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据,当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出元素存储的内存地址:

a[i]_address = base_address + i * data_type_size

其中data_type_size表示数组中每个元素的大小,在上述公式中,数组中存储的是int类型的数据,所以data_type_size就为4个字节。

数组时间复杂度

数组适合查找操作,但是查找操作时间复杂度并不为O(1),即便是排好序的数组,用二分查找,时间复杂度为O(logn)。所以,数组支持随机访问,根据下标随机访问的时间复杂度为O(1)。

访问越界问题
int main(){
	int a[3]{0};
	for(int i = 0;i<=3;i++){
	a[i] = 0;
	cout<<"a["< 

运行上述程序发现会无限循环输出0,因为数组大小为3,下标最大到2,而上述代码因为书写问题,导致for循环的最大索引访问到了3,数组a[3]访问越界,在C++中,只要不是访问受限的内存,所有的内存空间都可以自由访问,根据上面的数组寻址公式,a[3]会被定位到某块不属于数组的内存地址上,而这个地址正好是存储变量i的内存地址,也就是i的指针指向了&a[3],那么a[3]=0相当与i=0,所以会导致代码无限循环。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号