边界访问的空间权限

简介: 边界访问的空间权限

前言

不了解代码实现时的一些原理在解决特殊的bug时是很痛苦的,今天看到了一个比较有意思的程序,能很好的表示C语言在边界访问的行为。


一、边界访问是什么

平时我们定义数组,比如写一个a[10]是一个非常正常的操作,如果我们一直扩大的去写申请数组大小的数字,因为数组申请的空间都是存在某一块特定位置的,那迟早我们申请的大小会超过那个位置的容量从而访问到不该访问的位置,其实这个数字在100000就已经出现问题了,但这一块的语法是对的,程序也会继续运行(写-10都不会报错),不过他是绝对没有申请到这么多空间的

二、边界访问举例

要判断申请的一个空间是否合法,主要分为两个操作,一个是这个空间定义在哪里,还有一个是定义多少的有效空间,第一件事情主要由操作系统完成,第二件事情主要由程序员自行检查完成,都是不归C语言管的,也就是说C语言是无越界检查的(但是编译器可能会有,C++也是有的)

下面看一串代码

下面是运行结果

这里可以发现原来存着的变量被改变了(这里就算是const int也会被改变,但是c++不会)

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

一般如何在项目里比较好的规定边界呢?一个方法是数量,就是给你一个数,超过他了就是越界了,非常的直观,还有就是用模仿字符串实现方式,规定特殊结束标志。

相关文章
|
编解码 算法 数据处理
基于八叉树的空间划分及搜索操作
基于八叉树的空间划分及搜索操作
基于八叉树的空间划分及搜索操作
|
8月前
|
数据库管理
敏感列权限的申请和分配
敏感列权限的申请和分配
28 1
|
机器学习/深度学习 人工智能 知识图谱
ACL 2020 | CASREL: 不受重叠三元组影响的关系抽取方法
ACL 2020 | CASREL: 不受重叠三元组影响的关系抽取方法
465 0
ACL 2020 | CASREL: 不受重叠三元组影响的关系抽取方法
|
定位技术
使用定位技术,边界判断要谨慎
使用定位技术,边界判断要谨慎
104 0
|
运维 安全 数据安全/隐私保护
使用管控策略,设定多账号组织全局访问边界
企业上云多账号架构中,如何做到从上到下管理的同时,处理好员工的权限边界问题?
4945 0
Confluence 6 为空间赋予公共访问
希望为一个 Confluence 空间赋予公共访问权限,你必须为匿名用户赋予下面的权限: 在全站启用 可以使用(can use)权限,如上面描述的的。
857 0