“悬空指针”和“野指针”究竟是什么意思?有什么区别
提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再熬述了,今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野指针”。
悬空指针
C语言中的指针可以指向一块内存,如果这块内存裆后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。
下面这段C语言代码是一个例子请看
void *p =malloc(size); assert (p);free(p);//现在p是“悬空指针
C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生,很难定位。这是因为在free(p)之后,p指针仍然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突,那么之后使用p并不会引发错误。但是却出现了悬空指针,还不报错。最难调试的bug总是不能轻易复现的bug,对不?
所以在实际的C语言程序开发中,为了避免出现“悬空指针”引发不可预知的错误,在释放内存之后,常常会将指针p赋值为NULL,
void *p =malloc(size); assert(p);free(p);
p=NULL; //避免“悬空指针//避免“悬空指针”
这么做的好处是一旦再次使用被释放的指针p,就会立刻引发“段错误”,程序员也就能立刻知道应该修改C语言代码了。
野指针
上面我们讲的“悬空指针”是指向被释放内存的指针,“野指针”则是不确定其具体指向的指针。“野指针”最常来自于未初始化的指针,例如下面这段C语言代码:
void*p; //此时p是“野指针”
因为“野指针”可能指向任意内存段,因此它可能会损坏正常的数据,也有可能引发其他未知错误,所以C语言中的“野指针”危害性甚至比“悬空指针”还要严重。在实际的C语言程序开发中,定义指针时,一般都要尽量避免“野指针”的出现(赋初值)
void *p= NULL; void *data= malloc(size);
这两点内容,是C语言比较重要的内容,一定要注意.
“悬空指针”和“野指针”究竟是什么意思?有什么区别相关推荐
- C语言“悬空指针”和“野指针”究竟是什么意思?
各位,提起C语言我们很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:"悬空指针"和"野指针&quo ...
- “悬空指针”和“野指针”究竟是什么意思?
关注.星标公众号,不错过精彩内容 素材来源:网络 编辑整理:strongerHuang 提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大 ...
- C语言中的“悬空指针”和“野指针”是什么意思?
提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:"悬空指针"和"野指针&qu ...
- 【数据结构】悬空指针和野指针
[数据结构]悬空指针和野指针 一.悬空指针 二.野指针 三.小结 一.悬空指针 在C/C++中,一个指针指向的对象被删除后,该指针变量就变为悬空指针,即指向非法内存,如果所释放的空间被再分配而继续 ...
- 什么是“NULL指针”,“悬空指针”和“野指针”?
1,什么是NULL指针? NULL用于指示指针未指向有效位置.理想情况下,如果在声明时不知道指针的值,则应将指针初始化为NULL.另外,当由它指向的内存在程序中间被释放时,我们应该使指针为NULL. ...
- 【C 语言】指针数据类型 ( 野指针 | 避免野指针推荐方案 )
文章目录 一.野指针 二.避免野指针推荐方案 一.野指针 参考 [C 语言]内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 ) 四. 野指针 ( 程序BUG根源 ...
- 指针辨析:悬垂指针、哑指针、野指针、智能指针
原文地址:https://blog.csdn.net/zhaojinjia/article/details/8770989 悬垂指针: 1:提出的原因: 请看下面的代码片段: int *p=NULL; ...
- 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针
文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...
- 指针、野指针、指针常量、常量指针
指针 概念 指针是什么? 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量 ...
最新文章
- Android 串口通讯 获取卡号
- 寻找听过我讲座的大学生
- C语言程序设计 | 整型、浮点型在内存中的存储方式
- 一辆车,一年大概要花费多少钱,除了油费?
- 基于ServerSokect和Soket的简易Qq程序
- php中json对象转字符串,JSON对象转字符串的一些方法
- 简单、好用的PHP爬虫框架开发实战:教你轻松抓取 10w+ 美女壁纸!
- 计算机小喇叭找不到,电脑右下角小喇叭不见了怎么办?
- 如何提高用户粘性,增强活跃度?
- 北京地铁21号线_北京迎来地铁22号线,全长81公里,沿线的市民有福了
- 5-3 人际资源整合-辨别同事、结交优质同事、拒绝烂同事
- html 文件常用格式
- 对比:空洞卷积与转置卷积(吉米王)
- linux修改显示日期格式,centos面板日期格式调整
- failed to load steamui.dll怎么解决?
- kali2.0linux折腾记
- 神经网络、机器学习和大数据速查图
- 图像处理-直方图的反向投影
- 免费用微软软件,中国学生享用DreamSpark完全攻略
- 教你技巧不让IP地址冲突干扰你的网络局域网