「已注销」 2021-04-04 09:00 采纳率: 50%
浏览 79
已采纳

CreateCompatibleDC返回NULL如何处理

windowsAPI + C语言

反复执行以下代码,其中CreateCompatibleDC有几率返回NULL,此时GetLastError = 0x6,但没找到哪里发生内存泄漏,应该都Delete了,且Delete返回均正常。

此主线程反复执行且只反复执行这些步骤。此时有线程在处理消息循环,且消息循环确保没有问题。CreateCompatibleDC出现错误的时机貌似是随机不确定且不连续的,结束后过一段时间还是会报错

///////////////////////////////////////////////init
BITMAPINFO bmi = {{0}};
VOID* p_bmp_buf;
bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -height - 1;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biSizeImage = width * height * 4;
m_hdc = CreateCompatibleDC(disapp.m_hdc); //内存泄露可能?
if(m_hdc == NULL)
{
MAKEDEBUG(false, _T("from:(...-sturct tagIMAGE-newImage-sign2)\ninf: api_err 0x%x (see CreateCompatibleDC)"), GetLastError());
return DEM_WINAPI;
}
m_pBitmap = CreateDIBSection(disapp.m_hdc, &bmi, DIB_RGB_COLORS, (VOID**)&p_bmp_buf, NULL, 0);
if(m_pBitmap == NULL)
{
int err = GetLastError();
DeleteDC(m_hdc);
MAKEDEBUG(false, _T("from:(...-sturct tagIMAGE-newImage-sign3)\ninf: api_err 0x%x (see CreateDIBSection)"), err);
return DEM_WINAPI;
}
g_hbmp_def = (HBITMAP)SelectObject(m_hdc, m_pBitmap); //以备清空内存
text_font = (HFONT)GetCurrentObject(m_hdc, OBJ_FONT);
m_buffer = (PDWORD)p_bmp_buf;


text_setfontf(20, 10);
SetBkMode(m_hdc, TRANSPARENT);
////////////////////////////////////////////////////reset
if(m_hdc != NULL)
{
if(DeleteObject(SelectObject(m_hdc, g_hbmp_def)) == 0) MAKEDEBUG(false, "??1");
// if(DeleteObject(m_pBitmap) == 0) MAKEDEBUG(false, "??2");
if(DeleteObject(text_font) == 0) MAKEDEBUG(false, "??3");
if(DeleteDC(m_hdc) == 0) MAKEDEBUG(false, "??4");
}
g_hbmp_def = NULL;
text_font = NULL;
m_hdc = NULL;
m_pBitmap = NULL;
m_buffer = NULL;
  • 写回答

4条回答 默认 最新

  • 关注

    有没有可能内存不足的情况呢?因为分配过多,没有释放导致

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码