博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么delete p;后最好加上p = NULL; ? (浅谈内存泄露和内存过度释放)
阅读量:4142 次
发布时间:2019-05-25

本文共 850 字,大约阅读时间需要 2 分钟。

       一直很怕内存泄露,内存泄露有时候真的会有严重的后果. 我在处理内存问题时经常小心翼翼,生怕忘了释放. 但是,上次在某公司实习,我把内存重复释放了,结果引起了程序的错误. 由于程序很大,而且很复杂,所以开始并没有找到问题所在,花了好长时间才找到. 哎,差点被骂. (后来发现,网上有很多人也有这个错误,所以,作为一个程序员,要利用好网络)

      后来才知道,这是由于我没有掌握一个良好的习惯:在释放内存后,要将相关指针置为NULL. 这样可以防止后续对该指针进行操作时出错, 先看一个不好的风格.

 

       该程序风格不好(尽管正确):

#include
int main(){ int *p = new int(5); delete p; return 0;}

      现在假设程序很大,不小心又释放了一次,即:

#include
int main(){ int *p = new int(5); delete p; delete p; return 0;}

       运行程序,程序会crash, 这就是内存过度释放的后果, 如果程序很大,就很不好找. 而且,编译器提示的信息也非常有限. 请不要说:为什么要释放两次呢?我只能说:是人,都会大意, 都会犯错误,何况,害怕内存泄露已经害怕得太久了.

 

       来看看下面的程序,在释放后将指针置为NULL:

#include
int main(){ int *p = new int(5); delete p; p = NULL; // 如果没有这一个语句,程序就会crash delete p; // 没关系, 但通常会对是否为NULL进行判断, 这样就更需要将p置为NULL了 p = NULL; return 0;}

        结果程序可以正常运行,这就是将p置为NULL的好处, 如果按照网上的观点,那就是:上了厕所时候,最好洗洗手.

  

        另外,在程序中,用指针之前,通常会进行判断,如果你不置为NULL, 那么,很多时候就会引入bug.

     

 

 

转载地址:http://jnzti.baihongyu.com/

你可能感兴趣的文章
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(上)
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>
【JavaScript 教程】面向对象编程——实例对象与 new 命令
查看>>
我在网易做了6年前端,想给求职者4条建议
查看>>