当前位置:网站首页>边界访问的空间权限
边界访问的空间权限
2022-08-02 16:37:00 【康来个程】
前言
不了解代码实现时的一些原理在解决特殊的bug时是很痛苦的,今天看到了一个比较有意思的程序,能很好的表示C语言在边界访问的行为。
一、边界访问是什么
平时我们定义数组,比如写一个a[10]是一个非常正常的操作,如果我们一直扩大的去写申请数组大小的数字,因为数组申请的空间都是存在某一块特定位置的,那迟早我们申请的大小会超过那个位置的容量从而访问到不该访问的位置,其实这个数字在100000就已经出现问题了,但这一块的语法是对的,程序也会继续运行(写-10都不会报错),不过他是绝对没有申请到这么多空间的。
二、边界访问举例
要判断申请的一个空间是否合法,主要分为两个操作,一个是这个空间定义在哪里,还有一个是定义多少的有效空间,第一件事情主要由操作系统完成,第二件事情主要由程序员自行检查完成,都是不归C语言管的,也就是说C语言是无越界检查的(但是编译器可能会有,C++也是有的)。
下面看一串代码

下面是运行结果

这里可以发现原来存着的变量被改变了(这里就算是const int也会被改变,但是c++不会)
模拟一下栈的实现可以解释这个问题,如下图我们这个时候如果执行操作buf[4]的赋值,就自然会改到原先存在于这一块内存位置的值,于是出现了上述情况(有些编译器对于内存溢出赋值的操作是不会报错的)。但是在项目里我们并不能根据这个来直接进行错误的分析,因为每一个编译器对于变量即内存的管理还有是否判断溢出都是不一样的,我们只要做到不越界就好了。

一般如何在项目里比较好的规定边界呢?一个方法是数量,就是给你一个数,超过他了就是越界了,非常的直观,还有就是用模仿字符串实现方式,规定特殊结束标志。
边栏推荐
- MYSQL下载及安装完整教程
- Summary of CNN classic models [easy to understand]
- 锁定和并发控制(四)
- 领导无线边缘AI的联合神经形态学习,具有较高的识别精度以及较低的能耗
- Informatica旗下PowerCenter的元数据库解析
- [LeetCode]剑指 Offer 55 - I. 二叉树的深度
- 链表| leecode刷题笔记
- Gartner released, annual Challenger!
- Timestamp formatting "recommended collection"
- Antd-ProComponents中的EditableProTable无法在子行继续新增子子行的临时解决方案
猜你喜欢
随机推荐
内网渗透之kerberos认证(三)
研发了 5 年的时序数据库,到底要解决什么问题?
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
【二】TS基本类型
一文搞懂│php 中的 DI 依赖注入
Summary of CNN classic models [easy to understand]
小心 transmittable-thread-local 的这个坑
数字孪生园区场景中的坐标知识
js通过两种方式进行对商品价格排序
扎克伯格“喜迎”苹果AR产品,上市两年终迎大幅涨价
PostGresql listen与notify命令
锁定和并发控制(四)
数字孪生园区场景中的坐标知识
什么是APS系统?导入APS要注意什么?值得反复观看
几种常见的跨域解决方法
Default username and password (SQL)
DSP-ADAU1452输入通道配置
Oracle 11g rac打完补丁,dbca新建数据库还需要执行应用补丁的sql吗?
如何为项目匹配资源技能和要求?
开始使用 NVIDIA Jetson Orin 上的深度学习加速器


![牛客的课程订单分析[分组统计时如何取指定行字段?]](/img/9d/d27b8372ae5e5f1c7b9e6f5e9bb1f6.png)


![js商品总价格、最高价格商品、排除重复商品[初版]](/img/6f/11241f0d717b0c4e163986ba76fe0b.png)


