内存泄露的解决办法
来源:秒知站 本文已影响1.72W人
来源:秒知站 本文已影响1.72W人
什么是内存泄漏(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)最后以下是怎样避免内存泄露:良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。使用了内存分配的函数,要记得要使用其想用的函数释放掉,一旦使用完毕。
少年白的解决办法
ATM机存款遇到无法识别的人民币解决办法?
天然气泄漏怎么办 天然气泄漏的解决办法
手机内存充足却无法安装任何应用软件的解决方法
ipadmini1很卡的解决办法
天然气泄漏的解决办法
华为手机内存不足解决办法适用所有华为EMUI系统
绝地求生内存不足 解决方案
存折丢了的解决办法 存折丢了的解决办法是什么
绝地求生游戏内存不能为read解决方法
如何解决苹果手机内存不够的问题
内存溢出和内存泄漏的区别
iPad无法开机的解决办法
PS中保存的图片太大解决办法,指定大小储存图片
win10系统内存占用率高怎么解决
绝地求生内存不能为written 解决方案
wifi卡顿的解决办法
电脑的物理内存使用率太高怎么解决
ipad网速慢的解决办法
什么是内存泄露内存泄露如何解决
nsis error解决办法
“该内存不能为read错误”怎么解决
如何保护身份证信息及泄露信息的处理办法
燃气泄露什么气味
wifi密码是怎样被泄露的
松露保存方法