在程序中增加了一段释放GDI对象资源的代码后,编译成功,运行程序出现 Debug Assertion Failed 中断错误,如下图:
并指向 dbgrppt.c 文件的89行代码处
// dbgrppt.c
_CRTIMP void _cdecl _CrtDbgBreak(
void
)
{
DebugBreak();
}
搜索相关问题发现,中断是对DC资源的释放方式错误而导致的,在我的代码中使用了
CDC *pDC = GetDlgItem(IDC_STATIC_FRAME)->GetDC();
……
ReleaseDC(pDC);
问题在于pDC是由GetDC()从系统中得到的,我们只有使用的权限,没有修改的权限,所以应该使用ReleaseDC()进行释放,即不再占用该DC,只有在DC是由Create得到的时候,才使用DeleteDC()进行删除,因此解决方法就是把代码修改如下:
CDC *pDC = GetDlgItem(IDC_STATIC_FRAME)->GetDC();
……
ReleaseDC(pDC);