数组越界之后

数组下标越界 原理:因为c语言不会检测数组下标,所以如果我们给数组一个超出它大小的下标,就会照成数组越界。如果是想数组中写入数据的话,就会造成数据写入到不属于数组的地方,或者说如果读取数据的话,就会读取到别的地方的数据。因为数组地址是自低往高增长,而栈的地址是自高向下降低,所以如果我们将数组下标根据栈内的空间的分布,设置为特定的值,就可以修改或者是查看我们想要查看的地址的值。比如将返回地址设置成我们想要调用函数... 阅读详情
今天复习数据结构的时候在网上看到一道关于数组地址越界的题目,觉得很有意思就照着试了一下。
  int   i;  
  int   num[10];  
   
  for(i=1;i<=10;i++)  
        num[i] = 0;  
  printf("loop   end.");

问能否显示出"loop end."

答案应该是和编译器有关,要么死循环,要么数组地址越界读写错误。

数组越界这个很容易理解,而关于死循环出现的原因是,当 i=10 的时候 i 的地址和 num[i] 是一样的,也就是说这个时候 num[i]=10 相当于是对 i 进行了 i=0 的操作,于是死循环出现了。这应该是和编译器有关的,能不能出现死循环现象要看编译器是不是这样分配内存了。

为什么会出现地址重叠呢,我改了一下上面的代码,查看一下 i 和 num 的地址:

然后发现 i 的地址是 0x0012ff3c ,而 num[] 的地址是 0x0012ff14,中间正好差 40 个字节,也就是 10 个 int 的长度。也就是说 int(*(num+10)) 其实就是指向的 i 的值。

然后看到有人说C++的规范说数组的下标变量是放在数组的最后的,对于这个规范我没有去查,不过对于上面这个问题好像也没什么联系。

也就是说如果在 int i 和 int num[10] 中间定义一些其他的变量的话,num[10] 肯定就是写到别的变量地址上去了,对于循环本身也就没影响了。当然是在那个地址可以写的情况下,否则自然是挂掉没商量。

还有一点就是 i 和 num[] 的类型都是一样的,所以才会造成这样的重叠问题。

 
大语言模型无代码构建知识图谱概述 由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。 阅读详情

相关推荐

数组越界及其避免方法,C语言数组越界详解

来自公众号:技术让梦想更伟大所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一...

编程与实战的博客 5308

C语言数组越界问题

越界问题: 数组越界获取到的值. 因为越界后,获取到的值是按照存储的先后,先存入的则地址高,后存入的则地址低. 数组越界后,如果你越界了那么会获取到地址高的值. 所以在C语言当中对数组越界方面,要十分注意. 如果越界问题,从上面所说,获取到的是高地址. 那么需要注意的一点,C语言对于for、while、switch等一些语句写进栈会有不一样的情况. 如果要真正的理解,需要看汇编以及一些存储问题. 那么用一个大概的想法. 以下是数组越界获取到的值的想法. 第一:获取到的就是一些垃圾

m0_55990042的博客 2549

YOLOv11改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、恶劣天气等问题

在一些特定情况下,目标检测任务由于多种因素的影响,变得更加复杂和困难。以下是几类常见的困难目标检测场景:1. 小目标检测定义:小目标检测是指当目标在图像中的占比非常小时,模型需要准确识别和定位这些目标。典型场景包括远程监控、卫星图像分析等。挑战1. 低分辨率:由于目标在图像中占据像素较少,细节缺失,特征提取难度增加。2. 特征不足:小目标缺乏明显的形状和纹理特征,容易被复杂背景淹没。3. 检测难度大:由于小目标与背景之间的对比度较低,误检的几率上升。4. 数据不平衡。

qq_64693987的博客 4万+

数据结构--防止数组越界

防止数组越界的几种方法: 1、检查传入参数的合法性 2、传递数组元素个数,使用两个实参,一个是数组名,一个是数组长度,处理时判断数组的大小,保证自己不要访问超过数组大小的元素 3、处理数组越界时,可以遍历打印数组的索引 4、Java中可以加入try{} catch(){} ...

weixin_41718056的博客 1242

c语言数组越界的避免方法

1、尽量显式地指定数组的边界 #define MAX 10 … int a[MAX]={1,2,3,4,5,6,7,8,9,10}; 在 C99 标准中,还允许我们使用单个指示符为数组的两段“分配”空间,如下面的代码所示: int a[MAX]={1,2,3,4,5,[MAX-5]=6,7,8,9,10}; 在上面的 a[MAX] 数组中,如果 MAX 大于 10,数组中间将用 0 值元素进...

liming0931的专栏 5802

遇到的地址越界问题

以前上课时经常听老师说到数组地址越界的危险性,自己很少遇到这方面的问题,也没太在意。今天调程序遇到了一个问题,检查了n遍还是想不明白问题在哪儿,情况如下,创建了3个数组: char query[QUERY_BUF_LENGTH]; char query1[SUBQUERY_BUF_LENGTH];  char query2[SUBQUERY_BUF_LENGTH]; 然后初始化数组quer

crystal的专栏 2056

C语言基础 数组越界之后

----------statr reading---------- 问题发现:数组有着下标从‘0’开始的性质

kira_981019的博客 2252

数组越界会发生什么

文章目录一、数组越界会发生什么二、 数组越界详解 一、数组越界会发生什么 C语言非常重视运行时的效率,所以没有进行数组越界检查,而C++继承了C的效率要求,自然也不做数组越界检查。(检查数据越界编译器就必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降)。看下面一段代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int main() {

森明帮大于黑虎帮的博客 1万+

数组越界

平时打题的时候,有时找一个bug找半天,就很难顶。 刚学数组那会儿,经常会看到数组越界四个字,当时我也是一脸懵逼 ,现在终于有时间来抓一下这条虫了。 定义:所谓数组越界,就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外。 数组下标的取值范围只能预先推断一个值来确定数组的维数,作为秃头程序猿的我们,就得学会检验数组的边界啦。 一般情况下,数组越界包括两种:数组下标取值越界与指向数组的指针的指向范围越界。 第一种:数组下标取值越界 意思就是访问数组的时候,下标的取值不在

SG_teresa's blog 1万+

C语言之数组越界

C语言难点:数组越界 今天巨星给大家讲一讲数组越界数组的定义 数组组成:函数类型,数组名,[数组长度];PS:数组长度必须是常量,c99允许变量使用,vs编译器不允许,例:int b =10;int arr[b]//c99允许,vs不可以;例如:int arr[10]表示的是函数类型为int,长度为10的数组arr;注意:数组在使用时没有函数类型,而且[数组下标],例如:arr[0]=1表示...

巨星博客 2027

什么是数组越界?数组越界有什么后果?_C语言数组越界导致无限循环

昨天晚上,我正在给之前获奖的同学发奖品,正在进行中的时候,看到黄兄推送了一篇文章,里面讲到数组越界会导致无限循环。关于抽奖看这篇文章《Linux进程管理数据结构》,以后也会不定期抽奖,今年多赚点钱,过年的时候,希望给大家抽一个大奖,喜欢的读者使劲给转发点赞,关注,未来是你们的,大奖也是你们的,感谢支持,不喜欢的请轻拍。过年抽奖我还是很期待的,每年公司的年会抽奖的时候,我总是能小中一把,有一年我还中...

weixin_39958137的博客 1972

数组访问越界问题

      1、什么是数组访问越界?我们通过数组的下标来得到数组内指定索引的元素。这称作对数组的访问。如果一个数组定义为有n个元素,那么,对这n个元素(下标为0 到n-1的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为“越界数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的

gcyy0106的专栏 1万+

C语言中的数组越界

因为C语言不检查数组越界,而数组又是我们经常用的数据结构之一,所以程序中经常会遇到数组越界的情况,并且后果轻者读写数据不对,重者程序crash。下面我们来分析一下数组越界的情况:结合我的另外一篇文章 C语言的内存管理http://blog.csdn.net/wind19/archive/2010/10/25/5964090.aspx1) 堆中的数组越界

marken 3万+

数组越界及动态数组

数组越界与动态数组

小熊的博客 1055

【C语言初阶】数组越界

本节介绍了C语言中数组越界访问。

共同学习,相互分享。 1036

70%新手崩溃的数组越界问题:5步调试法与预防策略

在C、C++等编程语言的学习和使用过程中,数组越界问题是新手们经常遇到且容易崩溃的难题之一。数组越界可能会导致程序崩溃、数据损坏等严重后果,而且由于其隐蔽性,排查起来往往十分困难。本文将详细介绍数组越界问题的成因、危害,并提供一套5步调试法以及相应的预防策略,帮助新手们轻松应对数组越界问题。

星辰夜语的博客 1547

防止数组越界方法

一.最普通的方法,判断数组里边元素的个数:如 if (indexPath.row < [_datasourceArray count]) { item = [_datasourceArray objectAtIndex:indexPath.row]; } 优点:这种方法简单,易懂 缺点: 1>比较麻烦,一个程序里边有好多数组,每次用...

weixin_30535167的博客 1391

C++如何避免数组越界

相信很多小伙伴在进行C语言学习和开发过程中都会遇到一个常见的bug,那就是数组越界,对于数组越界其主要是可能影响到正常的程序逻辑,其非常容易伪装成其他问题进而表现出来,比如由于越界篡改了相关数据,其暴露的现场就是相应数据被改后的现象,这样几乎无法直接从现象找到越界的位置。 那么对于大部分优秀的C语言开发者而言,更多的是养成了良好的编程习惯,对于数组越界的访问变量进行防御性限制,从而防止越界访问的问题。当然对于要求编写高效的代码,就需要工程师们对代码进行严格的把控,以降低越界风险。 然而C++作为一种带面向对

weixin_44264668的博客 2547

陀螺仪LSM6DSV16X与AI集成(1)-轮询获取陀螺仪数据

陀螺仪LSM6DSV16X与AI集成(1)----轮询获取陀螺仪数据CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/134772668B站教学视频:https://www.bilibili.com/video/BV1RC4y1y75J/本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据。读取到的数据会被转换为适当的单位并通过串行通信输出。这个代码是一个很好的起点,用于了解如何操作 LSM6DSV16X 传感器并获取其数据

上一篇: 测试一下
下一篇: LZ77源码阅读笔记
Louiskingdom
博客等级 码龄25年 0粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值