提起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语言比较重要的内容,一定要注意.

“悬空指针”和“野指针”究竟是什么意思?有什么区别相关推荐

  1. C语言“悬空指针”和“野指针”究竟是什么意思?

    各位,提起C语言我们很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:"悬空指针"和"野指针&quo ...

  2. “悬空指针”和“野指针”究竟是什么意思?

    关注.星标公众号,不错过精彩内容 素材来源:网络 编辑整理:strongerHuang 提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大 ...

  3. C语言中的“悬空指针”和“野指针”是什么意思?

    提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:"悬空指针"和"野指针&qu ...

  4. 【数据结构】悬空指针和野指针

    [数据结构]悬空指针和野指针 一.悬空指针 二.野指针 三.小结 一.悬空指针   在C/C++中,一个指针指向的对象被删除后,该指针变量就变为悬空指针,即指向非法内存,如果所释放的空间被再分配而继续 ...

  5. 什么是“NULL指针”,“悬空指针”和“野指针”?

    1,什么是NULL指针? NULL用于指示指针未指向有效位置.理想情况下,如果在声明时不知道指针的值,则应将指针初始化为NULL.另外,当由它指向的内存在程序中间被释放时,我们应该使指针为NULL. ...

  6. 【C 语言】指针数据类型 ( 野指针 | 避免野指针推荐方案 )

    文章目录 一.野指针 二.避免野指针推荐方案 一.野指针 参考 [C 语言]内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 ) 四. 野指针 ( 程序BUG根源 ...

  7. 指针辨析:悬垂指针、哑指针、野指针、智能指针

    原文地址:https://blog.csdn.net/zhaojinjia/article/details/8770989 悬垂指针: 1:提出的原因: 请看下面的代码片段: int *p=NULL; ...

  8. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

    文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...

  9. 指针、野指针、指针常量、常量指针

    指针 概念 指针是什么? 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量 ...

最新文章

  1. Android 串口通讯 获取卡号
  2. 寻找听过我讲座的大学生
  3. C语言程序设计 | 整型、浮点型在内存中的存储方式
  4. 一辆车,一年大概要花费多少钱,除了油费?
  5. 基于ServerSokect和Soket的简易Qq程序
  6. php中json对象转字符串,JSON对象转字符串的一些方法
  7. 简单、好用的PHP爬虫框架开发实战:教你轻松抓取 10w+ 美女壁纸!
  8. 计算机小喇叭找不到,电脑右下角小喇叭不见了怎么办?
  9. 如何提高用户粘性,增强活跃度?
  10. 北京地铁21号线_北京迎来地铁22号线,全长81公里,沿线的市民有福了
  11. 5-3 人际资源整合-辨别同事、结交优质同事、拒绝烂同事
  12. html 文件常用格式
  13. 对比:空洞卷积与转置卷积(吉米王)
  14. linux修改显示日期格式,centos面板日期格式调整
  15. failed to load steamui.dll怎么解决?
  16. kali2.0linux折腾记
  17. 神经网络、机器学习和大数据速查图
  18. 图像处理-直方图的反向投影
  19. 免费用微软软件,中国学生享用DreamSpark完全攻略
  20. 教你技巧不让IP地址冲突干扰你的网络局域网

热门文章

  1. <<蜂鸟计划>>观后感
  2. C++友元与输出运算符重载
  3. LUA GC 简单测试
  4. 破解visual sourcesafe数据库admin用户密码
  5. Java jdbc连接数据库 INSERT插入
  6. 网络编程 UDP套接字
  7. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod(Add);
  8. win7右键在桌面上转圈圈的解决办法
  9. grub配置文件丢失的情况下修复
  10. 异步Socket通信总结[转]