空悬指针
简单地说,空悬指针是对象的指针的生存周期比对象更长所导致的,也就是说,对象销毁、删除了,不存在了,指针仍然存在,这时这个指针就成了空悬指针。
当对象被析构、删除时,如果指向它的指针没有被同时修改,那么指针仍然会指向那块内存(但是那块内存已经没有东西了)。系统此时可能会重新分配这块已经free掉的内存,如果程序再通过这个指针读这块内存,就可能会有不可预见的事情发生,因为这块内存可能被分配了完全不同的内容。如果程序此时要写这块内存,就可能会造成数据污染,进而可能带来超级难被发现的bug。如果内存已经被其它进程重新分配,此时再去访问指针指向的内容,就可能会发生片段错误(UNIX,Linux)或者一般性保护错误(Windows).如果程序有足够的权限去重写内核内存分配器的内容,还可能造成系统的不稳定。在有垃圾回收机制的面向对象语言中,阻止空悬引用的方法是销毁所有访问不到的对象,也就是说他们也就没有所谓的指针了,这是由追踪或引用计数而确保的。然而finalizer可能会创建新的对象的引用,这就要求对象要再生来防止空悬引用。

野指针作为一个指针,甚至都没有被初始化,也就是说虽然它的类型是一个指针,但它根本没有值。它跟NULL指针还有差别,NULL是指向了0地址,而野指针是没有地址。也就相当于,int a=0;和int a;的区别。

以下举例说明:

{char *dp = NULL;/* ... */{char c;dp = &c;}
//到这里,c已经被销毁了,dp就变成了空悬指针
}
#include <stdlib.h>void func()
{char *dp = malloc(A_CONST);/* ... */free(dp);         /* dp 现在是空悬指针 */dp = NULL;        /* dp 不再是空悬指针*//* ... */
}
int *func(void)
{int num = 1234;/* ... */return &num;//返回了一个指针,但是指针指向的对象,在函数结束时已经销毁了
}

第三种情况我在这篇文章也有写。

转载于:https://www.cnblogs.com/drunknbeard/p/9502171.html

空悬指针和野指针(Dangling pointer and wild pointer)相关推荐

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

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

  2. 指针、野指针、指针常量、常量指针

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

  3. C语言特殊指针——const指针、void指针、NULL指针、零指针、野指针

    const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性 指向常量的指针: const int *pa; int const *pa; 两者等 ...

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

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

  5. 空指针、悬空指针、野指针

    文章目录 前言 一.指针? 二.指针的应用场景 三. 空指针 四. 悬空指针 五. 野指针 正确用法 总结 前言 相信很多小伙伴对指针的使用都有一定的了解了.但更多的人可能对指针又爱又恨.这次我们谈点 ...

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

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

  7. 指针之野指针系列(2):如何规避野指针

    指针之野指针系列(2):如何规避野指针! 对于野指针的成因,部分由笔者上篇博文吸引而来的读者已经知道并且理解,但是对于部分由外网搜索而来的读者可能不是很理解,因此可以参考一下笔者上篇博文:指针之野指针 ...

  8. iOS 野指针定位:野指针嗅探器

    程序员大咖 点击右侧关注,免费进阶高级! 作者:林大鹏天地 链接:https://www.jianshu.com/p/9fd4dc046046 一. 前言 最近最近被指派去解决一些线上的崩溃问题,经常 ...

  9. “悬空指针”和“野指针”究竟是什么意思?有什么区别

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

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

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

最新文章

  1. NAT技术解决了IPv4地址短缺的问题,假设内网的地址数是m,而外网地址数n,若mn,则这种技术叫做(66),若mn,且n=1,则这种技术这叫做(67)。【答案】A C
  2. GMM 模型需不需归一化问题
  3. 集合框架(泛型概述和基本使用)
  4. 1.5 成员方法的声明和调用,形参,实参
  5. 谷歌SEO和百度SEO的区别
  6. Java提高篇 —— Java三大特性之继承
  7. c盘清理代码_拒接卡顿,从c盘减负、系统修复及网络加速做起!奥利~~~
  8. CMake和Make——make makefile cmake qmake都是什么,有什么区别?
  9. android上最好的linux终端,如何在带有Termux的Android上使用Linux命令行 | MOS86
  10. 标准化设计解决方案 - 标记语言和样式手册 表单
  11. Java 开发流程、运行原理、JVM 规范与实现
  12. 神经体液调节网络,神经网络能干嘛
  13. “博观而约取,厚积而薄发”——苏东坡
  14. 【Python基础知识整理】
  15. 【百元钱买百只鸡问题】一只公鸡5元钱,一只母鸡3元钱,三只小鸡1元钱。要求100元买100只鸡,请给出所有可行的结果?
  16. k8s节点NotReady问题定位
  17. 【hadoop生态之ZooKeeper】第三章ZooKeeper内部管理【笔记+代码】
  18. C语言编程实现程输出所有玫瑰花数
  19. sqli-lbs:Less-5~10通关详解
  20. 什么是雅可比矩阵?利用雅可比矩阵分析动力学

热门文章

  1. return,continue的示例
  2. Java伪装csrss_结束伪装成系统进程名的进程的批处理
  3. Canonical发布信息图:Ubuntu Linux连接一切
  4. MAVEN插件打包SNAPSHOT包MANIFEST.MF中Class-Path带时间戳的问题
  5. linux文件系统和mount(硬盘,win分区,光驱,U盘)
  6. win32 sdk绘制ListBox控件
  7. C语言简明教程--指针5
  8. Firebird 问题总结
  9. 关于全局低级键盘hook的记录(WH_KEYBOARD_LL)
  10. 一次debug过程描述