内存泄露的解决办法

 时间:2024-10-30 20:19:40

1、case 1.new/delete成对使用case 2.正确的清理嵌套的对象指针。解决办法:a、在外部函数分配的堆内存,不要在调用函数里面释放,而应该在外部函数释放。b、尽量在构造函数中分配内存。c、在基类/继承类中分管各自的内存。

2、case 3 释放对象数组时,要使用delete []a、对单个对象、基本类型的变量,用delete;b、对基本类型数组,采用delete,delete[]均可;c、对自定义的对象的所组成的对象数组,一定要采用delete [].

3、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;

4、case 5 对于有指针对象的类,必须有显示的拷贝构造函数。

5、case 6 必要的重载赋值运算符。

6、case 7 基类的析构函数定义为虚函数。

7、这里主要存在基类指针指向派生类的情况。如果析构函数定义为虚函数,则释放基类指针时,如果该指针指向一个派生类,则会先调用派生类的析构函数,再调用基类的析构函数(不管是不是虚函数,派生类的对象析构的时候,都会先调用派生类的析构函数,再调用基类的析构函数)。

内存泄露的解决办法

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

  • 如何调整下划线和字体之间的距离?
  • 在WORD 中的横线上输入文字为什么横线会断开
  • 如何给文档尾部空格添加下划线?
  • word文档下划线上打字会跟着移动怎么办
  • WPS怎么为尾部空格添加下划线?
  • 热门搜索
    新学期手抄报 名人故事手抄报 缅怀先烈手抄报的图片 开学第一课手抄报小学 爱耳日手抄报 食品安全手抄报图片 五一劳动节手抄报内容 国庆节手抄报简单好看 读书手抄报内容资料 小学生清明节手抄报