垂悬指针:
在指针被delete之后,此时指针被称为空悬指针或者垂悬指针,即指向一块曾经保存she数据对象,但现在已经无效的内存的指针。

在C++编程中,当我们delete一个指针后,指针所指向的堆地址空间便被释放,指针值变成无效。虽然指针已经无效,但在很多机器上指针任然保存着已经被释放了的动态内存地址(并且内存地址中的值也并未被擦除),这会让编程人员误解,甚至理解错误。

观察如下实例:

#include <iostream>
#include <stdio.h>
#include <memory>
#include <QDebug>
using namespace std;
class Base
{
public:Base(){qDebug() << "Base";}virtual ~Base(){qDebug() <<"~Base";}void print(){qDebug() << "Base Print" << this;}
};int main(int argc, char *argv[])
{Base *t = new Base;{std::unique_ptr<Base> up;  //用智能指针管理指针t,在智能指针离开括号时,其生命周期便结束,同时释放指针t.up.reset(t);up->print();//up.release();}t->print(); //此时指针t所指向的内存地址已经被释放,但仍然可以调用成员函数,打印指针对象地址。//delete t;//t = nullptr;return 0;
}

下图是在Qt Creator中使用MSVC套件测试的运行结果:

有木有很惊喜,有木有很意外。

总结:
delete一个指针时,指针指向的内存区域并不会被清空,因为这样会占用CPU周期,此时它是一个危险的指针,会造成一些未定义的现象。像这样的代码有可能会工作很多年,只会在某个时候崩溃,因为程序中的其他地方发生了一些小的改变导致。这也很好地解释了为什么我们Delete一个指针后要将其置为NULL,是为了保证我们使用的是一个有效的指针,而不是会造成不可预知错误的野指针。

同类博文:https://blog.csdn.net/bajianxiaofendui/article/details/86742824#commentBox

C++学习交流群:

C++中的悬垂指针(delete指针后依然可以访问的问题)相关推荐

  1. VMWare中修改CentOS虚拟机静态IP后主机没法访问虚拟机

    场景 CentOS7中怎样设置静态IP: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119242495 在上面给虚拟机设置了静 ...

  2. 安卓系统辅助功能中的指针停止移动后点击是什么?OTG

    指针停止移动后点击是通过OTG连接鼠标,开启该项后,鼠标移动到应用图标或者选项上方停住,鼠标会自动点击该项,不需要手动点击 OTG即On-The-Go技术:是近年发展起来的技术.2001年12月18日 ...

  3. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  4. c语言野指针和空指针,C++中的空指针和野指针

    空指针常量 一个表示0值的整数常量,叫做空指针常量.例如:0.0L.1-1(它们都是值为0的整数常量表达式)以及(void*)0.void* NULL 都是空指针常量,空指针常量可以赋值给任何指针类型 ...

  5. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  6. delete指针之后应该赋值NULL

    首先,C++标准规定:delete空指针是合法的,没有副作用. 但是,delete p后,p并不会自动被置为NULL 问题来了,对一个非空指针delete后,若没有赋NULL,若再次delete的话, ...

  7. git 移动分支指针_理解git 中的HEAD指针branch指针

    HEAD指针 使用git checkout 来移动HEAD指针,移动的对象可以是分支指针也可以是快照. HEAD指针可以指向快照也可以指向branch.当指向branch时提交后会和branch指针一 ...

  8. 结构体前面加星号_C语言中带星号的类型指针有哪些特性

    C语言中带星号的类型指针有哪些特性 指针是什么?很多人说,指针就是地址,那这么说的人肯定是对指针有所了解,他们这么说也不能说全错,我只能在这里说:"他们并没有真正学会指针,如果想学好指针,请 ...

  9. c++引用另一个类的方法_利用CVE20191132:Windows内核中的另一个NULL指针取消引用...

    NULL指针取消引用应该早在几年前就已终止,但仍在恶意软件攻击中被发现和使用.这篇文章探讨了CVE-2019-1132的内部细节,Buhtrap小组将其用于针对东欧的受害者. 介绍 我们在本文中讨论的 ...

  10. 习题 8.21 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。

    C程序设计(第四版) 谭浩强 习题8.21 个人设计 习题 8.21 用指向指针的指针的方法对n个整数排序并输出.要求将排序单独写成一个函数.n个整数在主函数中输入,最后在主函数中输出. 代码块: 方 ...

最新文章

  1. 如果计算机语言是中国人发明的 | 每日趣闻
  2. 【网址收藏】k8s zookeeper-operator示例
  3. 正则表达式(grep命令,egrep命令,sed命令,awk命令,sort工具,uniq工具)
  4. aes加密算法_令你的文件安全有了新方法AES-256-GCM加密网站免费用
  5. 中国的这些民居都是你没见过的!
  6. P4587-[FJOI2016]神秘数【主席树】
  7. 前端学习(41):背景实现视觉差效果
  8. 想到Exchanger N parties的一种用法
  9. 微信小程序开发——小程序分享转发
  10. MyEclipse项目里面出现红叉的解决方案?
  11. cc2530设计性实验代码八
  12. appcan ajax mysql_AppCan之登录功能001
  13. 赖美云的认证照_818吴宣仪赖美云杨超越等《创造101》人气女孩旧照,鉴定是否整容~...
  14. 卸载Visual Studio 2015并安装Visual Studio 2019
  15. 浪潮网络交换机快速使用手册
  16. 什么是软考?软考有什么作用?
  17. 无权图的单源最短路径
  18. 利用PWM原理实现调光灯
  19. java 设计模式
  20. Android拾遗——如何反编绎APK文件

热门文章

  1. 卷积神经网络的网络结构——Hourglass
  2. FutureTask 中 get(timeout) 的超时是怎么玩的?
  3. html关机命令,shutdown关机命令不起作用
  4. oracle11gora1435,oracle导入的问题
  5. 【Day5.1】在坑人的免税店King Power蹭午餐
  6. 利用开源工具搭一套汉英翻译系统(二):词对齐
  7. 小米(MUUI)备份文件使用MT管理器打开
  8. 拔丝芋头的Java学习日记--Day2
  9. 数字转人民币大写(SQL SERVER)
  10. python - 数据类型