内存泄露的解决办法
什么是内存泄漏(memory leak)?
指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
操作方法
(01)case 成对使用case 2.正确的清理嵌套的对象指针。解决办法:a、在外部函数分配的堆内存,不要在调用函数里面释放,而应该在外部函数释放。b、尽量在构造函数中分配内存。c、在基类/继承类中分管各自的内存。
(02)case 3 释放对象数组时,要使用delete []a、对单个对象、基本类型的变量,用delete;b、对基本类型数组,采用delete,delete[]均可;c、对自定义的对象的所组成的对象数组,一定要采用delete [].
(03)case 4 指向对象的指针构成的数组,必须用户自己调用delete。for example:Point **pPtrAry = new Point*[10]; // 循环为每个指针分配一个Point对象; int i = 0; for (; i < 10; ++i) { pPtrAry[i] = new Point(i, i, "Green"); }// 下面语句并没有释放10个Point对象,释放的只是他们的指针所组成的数组 // 占用的10*sizeof(Point*) 空间,造成了内存泄露 // (180 = 10*sizeof(Point) + 10* 6; (6= sizeof("Green")))// delete []pPtrAry;// 正确的方法: for (i = 0; i < 10; ++i) { delete pPtrAry[i]; } delete []pPtrAry; // 或者delete pPtrAry;
(04)case 5 对于有指针对象的类,必须有显示的拷贝构造函数。
(05)case 6 必要的重载赋值运算符。
(06)case 7 基类的析构函数定义为虚函数。
(07)这里主要存在基类指针指向派生类的情况。如果析构函数定义为虚函数,则释放基类指针时,如果该指针指向一个派生类,则会先调用派生类的析构函数,再调用基类的析构函数(不管是不是虚函数,派生类的对象析构的时候,都会先调用派生类的析构函数,再调用基类的析构函数)。
(08)最后以下是怎样避免内存泄露:良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。使用了内存分配的函数,要记得要使用其想用的函数释放掉,一旦使用完毕。
-
怎么在Excel列A数据中筛选出列B数据?
已知excel列A数据和列B数据有部分内容相同,怎样才能筛选出哪些混在列A中的列B数据呢?最笨的方法就是复制列B的数据查找。这里,我给大家分享一种方法,既准确又快捷的方法。不信,您尝试一下。操作方法(01)打开需要编辑的Excel文件,观察列A和列B,列A列B有部分内容重复,现需...
-
在Word文档中怎么样进行简繁体转换?
字体有繁体和简体之分,而Word文档主要的功能是记录保存文本文字,可能由于区域不一样,有的喜欢用简体有的喜欢用繁体,为了方便查看,就需要用到简繁体的相互转换了。操作方法(01)方法一:比较常用的,就是用Word文档自带的简繁体转换功能,找到审阅——简转繁——便可将选择的...
-
Excel中身份证号计算年龄公式是什么
Excel是一款电子表格软件,直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。那么EXCEL中身份证号计算年龄公式是什么呢,下面我们就来了解一下。操作方法(01)在单元格中输入“=2018-MID(D4,7,)”。(02)D4表示身份证...
-
Steam错误代码118最新解决方案
Steam商店错误代码118怎么解决?Steam商城进不去,提示错误代码118应该怎么解决呢?大家不用担心,Steam错误代码118是电脑自身网络解析出现了问题,我们改下网络设置即可解决问题。那么,具体要怎么操作呢?接下来小编就给大家详细说说Steam错误代码118的解决方法,赶紧GET起...