king110_1 2023-03-17 12:22 采纳率: 25%
浏览 13
已结题

释放内存失败,位图DC为什么不能释放

我做了个查看位图的程序,每次换图时需要把前一图申请的内存释放掉,但是每次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);

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-17 12:35
    关注

    看看句柄是否有效,是否已经释放过了

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月24日
  • 修改了问题 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单