對開發中常見的內存泄露,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的,有時間可以去下來使用。
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成