我做了个查看位图的程序,每次换图时需要把前一图申请的内存释放掉,但是每次free完就产生异常
if (data != NULL)
{
DeleteObject(hBit);
ReleaseDC(hWnd,memDC); //并不能释放DC,每次返回的都是0
ReleaseDC(hWnd,winDC);
DeleteObject(memDC); //只有这样才能释放
free(data); //产生异常
}
szFile = OpenBmp(hWnd);
if (szFile != NULL)
{
wcscpy_s(fName, lstrlen(szFile) * 2, szFile);
}
else
return NULL;
hFile = CreateFile(fName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
R = ReadFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &num, NULL);
if (R)
{
R = ReadFile(hFile, &fif, sizeof(BITMAPINFOHEADER), &num, NULL);
winDC = GetDC(hWnd);
memDC = CreateCompatibleDC(winDC);
GetClientRect(hWnd, &rect);
dataSize = bfh.bfSize - bfh.bfOffBits;
data = (BYTE*)malloc(dataSize);
pbmi.bmiHeader = fif;
width = fif.biWidth;
height = fif.biHeight;
hBit = CreateDIBSection(memDC, &pbmi, DIB_RGB_COLORS, (void**)&data, NULL, 0);
R = ReadFile(hFile, data, dataSize, &num, NULL);
SelectObject(memDC, hBit);
open = TRUE;
InvalidateRect(hWnd, &rect, TRUE);
}
CloseHandle(hFile);