内存泄露的解决办法
admin
2022-10-28 03:00:57

什么是内存泄漏(memory leak)?
指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

操作方法

  • 01

    case 1.new/delete成对使用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

    最后以下是怎样避免内存泄露:良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。使用了内存分配的函数,要记得要使用其想用的函数释放掉,一旦使用完毕。

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...