为什么delete指针后指针设为null

Posted 无知的家伙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么delete指针后指针设为null相关的知识,希望对你有一定的参考价值。


int *p;
/*。。。。。。。。*/
delete
p; p=null;

  看代码的过程中,有这么一个疑问。删除了指针p指针p既是不存在,怎么还能设置指针pnull呢?为什么还要设置为null呢?

  后来得知计算机上删除数据的方式:删除数据(视频,音乐,文件等),计算机并不会把存储数据的硬盘区域(或者是内存)的内容擦除消去,而是将内容标记为可覆盖,这时候我们就不能再访问到数据,而这些可覆盖据数据会留在原来的硬盘区域直到被新的数据逐渐覆盖。(所以,删除了数据之后,只要没有对硬盘进行过多的操作,还是有可能复原数据的(所以,当我删除不可告人的东西时就要反复下载东西填充硬盘吗?(●ˇ?ˇ●)))

  正题来了,delete p 的含义不是删除消灭p。而是让p所指向的地址的内容标记为可覆盖。而p=null 则是将指针指向空。

  delete p 之后,p指向地址可覆盖,但是p仍然指向原来的地址,随着程序的运行,原本内存可能被使用,p指向可能内容改变。所以为了安全起见,将p指向null。避免p不小心再次被使用。

  如果直接p=null,而不先 delete p。那么p的地址不可被覆盖,造成内存泄漏(内存不可以再使用)。

这是我对这个问题的理解,如果有什么不对和补充,欢迎来信息。

以上是关于为什么delete指针后指针设为null的主要内容,如果未能解决你的问题,请参考以下文章

指针初始化时设置为0和NULL的区别?求高手解答~

为啥 delete 不将指针设置为 NULL?

在 NULL 指针上调用 delete 或 delete[] [重复]

delete释放内存

在c ++中最后没有使用指针时是不是需要将指针设为Null [重复]

C语言中, 为了避免野指针,是否可以在free和delete之后,把指针置为NULL就可以避免了?