• 对开发中常见的内存泄露,GDI泄露进行检测


    对开发中常见的内存泄露,GDI泄露进行检测

    一、GDI泄露检测方法:

    在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况。

    注意点:Create出来的GDI对象,都要用DeleteObject来释放;Create出来的DC,都要用DeleteDC来释放,GetDC得出的DC,要用ReleaseDC来释放。

     

    以下是一些常用到的函数:

     

    1、  检查GetWindowDC(), 后面是否有ReleaseDC();

    2、  检测GetDC();后面是否有ReleaseDC();

     

    3、  检测画刷CBrush:

    CreateSolidBrush()-》 DeleteObject();

     

    4、  检测画笔 CPen

    CreatePen()->DeleteObject();

     

    5、  检测创建字体CFont

    CreateFont->DeleteObject();

    CreatePointFont()->DeleteObject();

     

    6、  检测 创建WIN32窗口

    HWND hwnd = ::CreateWindow ()  ->  DestroyWindow(hwnd);

     

    7、  CBitmapbmp;
    bmp.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());

     后面要有bmp.DeleteObject();

     

    8、  CFont *pOldFont =pDC->SelectObject(&m_font);

    是否有pDC->SelectObject(pOldFont);

     

    9、  CRgn

    CreateRoundRectRgn() ->  DeleteObject();

     

    10、Graphics gc(pDC)   -> gc.ReleaseDC(pDC);

     

    11、CDialog对话框  Create() 出来的,需要有  DestroyWindow();

     

    12、凡是通过函数得到句柄的都需要用CloseHandle(句柄)来释放;

    如:HANDLE, HBRUSH ,HPEN

     HANDLE hFile = CreateFile();  -> CloseHandle(hFile);

     

     

    二、内存的检测方法:

    通过任务管理器中的“内存”列表,或是procexp.exe来观察是否出现内存泄露

    1、检查下列函数是否有一一对应:

          new   -> delete;

         Malloc -> free;

         GlobalAlloc  -> GlobalFree

     

     

    2、通过调试器和CRT调试堆来检测泄露

    把这个语句放到软件的结束部分_CrtDumpMemoryLeaks(); 在调试下运行程序时,如果有泄漏,就会在输出窗口显示内存泄露信息。

     

    3、借助内存泄露检测工具如:BChecker6.01 这个是适合VC6的,有时间可以去下来使用。

     from:http://blog.csdn.net/lin_angle/article/details/6603572

  • 相关阅读:
    更换glibc版本进行调试
    HDCTF 2020 Writeup
    Srop 原理与利用方法
    form使用DELETE被转换为GET的原因
    sqlite将时间转换为本地时间读取
    firewall-cmd命令
    windows创建系统服务命令
    Open_vSwitch操作
    Dublin Core
    CWM(Common warehouse metamodel)
  • 原文地址:https://www.cnblogs.com/lidabo/p/2975024.html
Copyright © 2020-2023  润新知