版权声明:本文为博主原创文章,未经博主允许不得转载,博客地址:http://blog.csdn.net/mars_xiaolei。 https://blog.csdn.net/mars_xiaolei/article/details/82755495
最近使用High-speed Chart(高速绘图控件)绘制统计图的时候,一创建CChartCtrl对象,在Debug模式下就运行报错,伴随着大量的内存泄漏。但是Release模式下不会出问题,因为Release模式跳过了这一部分的检测,下面来看一下出错的情况和解决方法。
看到这种问题,先点击重试按钮,会再报错,但也会进入报错的部分代码:
报错部分代码:
HINSTANCE hInst = AfxGetInstanceHandle();
选中AfxGetInstanceHandle,按F12,会发现是一个微软的一个接口
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{
ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle;
}
然后按F1进行搜索,跳转到MSDN页面,下面是函数的定义:
AfxGetInstanceHandle
此函数使您能够检索当前应用程序的实例句柄。
语法
HINSTANCE AFXAPI AfxGetInstanceHandle( );
返回值
应用程序当前实例的 HINSTANCE。如果调用从 DLL 的内部链接到MFC 版本的 USRDLL, 返回DLL的HINSTANCE。
备注
AfxGetInstanceHandle 始终返回可执行文件 (.EXE) 的 HINSTANCE,除非调用从 DLL 的内部链接d\的 MFC 的 USRDLL 版本。在这种情况下,它返回 HINSTANCE给DLL。
报错的原因就是每次获取的是空的句柄:
ASSERT(afxCurrentInstanceHandle != NULL);
解决方法:
HINSTANCE hInst = AfxGetInstanceHandle();
修改为:
HINSTANCE hInst = GetModuleHandle(NULL);