High-speed Chart创建对象失败导致内存泄漏问题

版权声明:本文为博主原创文章,未经博主允许不得转载,博客地址: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);

猜你喜欢

转载自blog.csdn.net/mars_xiaolei/article/details/82755495
今日推荐