zoukankan      html  css  js  c++  java
  • 内存泄露导致的原因总结

    最近再查内存泄露,总结一下自己发现的问题:

    1.new的东西一定要delete,delete后要将指针指到NULL.
    且不能有隐式泄露,即中间报错,或者函数return退出时都要释放
    比如:

    CFont  My_Font=new CFont;
    delete My_Font;
    My_Font=NULL;
    View Code


    2.new出的数组也要释放

    1 char *BlobMsg = new char[lengthRes];
    2 BlobMsg= (char*)(record[2]);
    3 
    4 delete[] BlobMsg;//删除数组时需要delete[],不能只是delete
    5 BlobMsg=NULL;
    View Code


    3.文件流打开必须要相应关闭

    1 outStream.open
    2 outStream.close();
    View Code


    4.将指针作为参数传入线程或者函数时,这个指针需要在线程中释放

    创建、传入:        

    1 threadInfoMain* InfoMain=new threadInfoMain;
    2 InfoMain->mParams=vec.at(i).c_str();
    3 InfoMain->pMultiThread=this;
    4 InfoMain->mfileName.Format("%s",FullPath.c_str());
    5 InfoMain->clientIP.Format("%s", inet_ntoa(name.sin_addr));
    6 InfoMain->sendsock=sock;
    7                                         
    8 
    9 pThread=AfxBeginThread(ThreadFuncServerMain,InfoMain);
    View Code


    在线程中释放:

    1 threadInfoMain* pInfo=(threadInfoMain*)lpParam;
    2 delete lpParam;
    3 lpParam = NULL;
    View Code


    5.Mysq查询结果数据集一定要释放

    1 MYSQL_RES * results;
    2 mysql_free_result(results); 
    View Code

    6.CLISTCTRL在删除原有数据时,需先删除所有显示内容,再删除所有字段

    1 clist.DeleteAllItems();
    2 
    3 while ( clist.DeleteColumn (0));
    View Code

    7.vector存入数据时,clear并不能释放数据所占内存,需要重新定义个局部vector,两个互相调换一下

    1  vector<CPersonIOData> m_PersonIOData;//全局
    2     if(m_PersonIOData.size()!=0)
    3     {
    4         vector<CPersonIOData> Stmp;
    5         //释放vector占用的空间
    6         m_PersonIOData.swap(Stmp);
    7     }
    View Code

    8.函数不能返回指向栈内存的指针,因为栈在函数结束时变量就会释放,
    详情可以参考这个:http://blog.csdn.net/jackystudio/article/details/11523353

    这样就是错误的:

    1 char* returnValue()  
    2 {  
    3     char str[]="HelloJacky";  
    4     return str;  
    5 }  
    View Code


    目前遇到的问题就这么多,我用了一款测试内存泄露的工具,朋友推荐的,叫AQTime,
    需要到网上去注册并下载最新版本,申请试用,试用只有14天,他能很快的指出我的软件的内存泄露。
    14天用完以后,我就只能看任务管理器中的涨幅了,发现每次触发一个事件,就涨,再次触发,还涨,

    内存并没有下降,就是有内存泄露了,那么就仔细查看代码,看哪出可能发生内存泄露,或者屏蔽部分

    代码,看看具体那块泄露。

  • 相关阅读:
    Chrome快捷键
    Nginx之基本介绍(一)
    windows程序调试
    python有序字典
    value是列表的字典排序
    构造Map并对其排序
    python读取文件时遇到非法字符的处理 UnicodeDecodeError: 'gbk' codec can't decode bytes in position
    python正则表达式 分割字符串
    python3 导入模块
    python3 以utf-8编码写文件
  • 原文地址:https://www.cnblogs.com/wangyuanf/p/3598157.html
Copyright © 2011-2022 走看看