为什么delete指针后指针设为null(已解答)
int *p;
/*。。。。。。。。*/
delete p;
p=null;
看代码的过程中,有这么一个疑问。删除了指针p,指针p既是不存在,怎么还能设置指针p为null呢?为什么还要设置为null呢?
后来得知计算机上删除数据的方式:删除数据(视频,音乐,文件等),计算机并不会把存储数据的硬盘区域(或者是内存)的内容擦除消去,而是将内容标记为可覆盖,这时候我们就不能再访问到数据,而这些可覆盖据数据会留在原来的硬盘区域直到被新的数据逐渐覆盖。(所以,删除了数据之后,只要没有对硬盘进行过多的操作,还是有可能复原数据的(所以,当我删除不可告人的东西时就要反复下载东西填充硬盘吗?(●ˇ∀ˇ●)))
正题来了,delete p 的含义不是删除消灭p。而是让p所指向的地址的内容标记为可覆盖。而p=null 则是将指针指向空。
delete p 之后,p指向地址可覆盖,但是p仍然指向原来的地址,随着程序的运行,原本内存可能被使用,p指向可能内容改变。所以为了安全起见,将p指向null。避免p不小心再次被使用。
如果直接p=null,而不先 delete p。那么p的地址不可被覆盖,造成内存泄漏(内存不可以再使用)。
这是我对这个问题的理解,如果有什么不对和补充,欢迎来信息。
为什么delete指针后指针设为null(已解答)的更多相关文章
- C++在delete指针后要赋值为NULL
C++标准规定:delete空指针是合法的,没有副作用. 所以我们在Delete指针后赋值为NULL或0是个好习惯.对一个非空指针delete后,若没有赋NULL,若再次delete的话 有可能出现问 ...
- servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)
先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...
- 转载:指针delete后要设置为NULL
本文来自:http://rpy000.blog.163.com/blog/static/196109536201292615547939/ 众所周知,最开始我们用new来创建一个指针,那么等我们用完它 ...
- C++指针delete后还要置为null
非常好的一篇说明: 转载:https://blog.csdn.net/qq_36570733/article/details/80043321 众所周知,最开始我们用new来创建一个指针,那么等我们用 ...
- free 或delete后指针怎么样了
free()和delete()只是把指针所指向的内存释放掉,但是并没有把指针本身删除,也没有把指针置为NULL; #include<iostream> using namespace st ...
- delete指针以后应赋值为NULL
delete p后,只是释放了指针中存放的地址中的内存空间.但是指针变量p仍然存在(即指针p本身所占有的内存),且p中存放的地址还是原来的地址. 例如: 对一个非空指针delete后,若没有将p赋为N ...
- 什么时候删除指针后,要给指针赋NULL
删除后需要赋NULL: 1.当在一个类里的时候,删除类的某个成员对象,需要给它赋NULL,以防其他地方使用这个成员的时候,不知道这个成员是否存在 eg: ref1::ref1() { tPint = ...
- delete指针以后应赋值为NULL——QT deletelater指针以后也同样要马上赋值为NULL
delete p后,只是释放了指针指向的内存空间.p并不会自动被置为NULL,而且指针还在,同时还指向了之前的地址 delete NULL编译器不会报错(因为delete空指针是合法的) 例: 对一个 ...
- 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?
五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...
随机推荐
- Golang学习---test写法和benchmark写法
一.Test 1. 每一个test文件须import一个testing 2. test文件下的每一个test case 均必须用Test开头并且符合TestXxxx形式,否则go test会直接跳过测 ...
- 递归可视化之汉诺塔的动画实现(turtle海龟)
import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): def push(self, ite ...
- chm制作及Haroopad使用(makedown工具)
所需工具 1.网文快捕(可以制作chm的工具,在IE浏览起立可以右键把复制内容保存到软件里) 下载地址:http://www.05sun.com/downinfo/278913.html 2.Haro ...
- docker 容器 详解
docker run ## 创建一个新容器 [root@localhost ~]# docker run --help Usage: docker run [OPTIONS] IMAGE [COMM ...
- 笔记之monkey自定义脚本
自定义脚本的稳定性测试 常规MOnkey测试执行的是随机的事件流,但如果只是想让Monkey测试某个特定场景者时候就需要用到自定义脚本,Monkey支持执行用户自定义脚本的测试,用户之需要按照Monk ...
- SpringMVC避免IE执行AJAX,返回JSON出现下载文件
- Busybox构建根文件系统和制作Ramdisk
定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统.它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整.功能丰富的文件系统,其中包括大量常用的应用 ...
- hdu3307 欧拉函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3307 Description has only two Sentences Time Limit: 3 ...
- OO第一单元三次作业总结
写在前面 第一单元作业是针对输入的多项式进行格式合法判断,然后进行求导,结果长度优化,最后输出.三次难度递增,不断添加新的需求,总体感觉在实现方面没有多大困难(?),个人主要困扰环节是寻找自己未知bu ...
- 别人的Linux私房菜(13)学习Shell脚本
CentOS6.x以前版本的系统服务启动接口在/etc/init.d/目录下,存放了脚本. Shell脚本因调用外部命令和bash 的一些默认工具,速度较慢,不适合处理大量运算. 执行方式有:直接命令 ...