注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

VC 2010+MFC:CMFCVisualManager::GetInstance()导致的内存泄露  

2011-04-20 20:01:41|  分类: Windows系统BUG搜 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
VC 2010的MFC函数,CMFCVisualManager::GetInstance()可能导致内存泄露。对此,VC2010的MFC类库并没有作处理。

导致泄露的代码位置:
\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxvisualmanager.h 的 484行。

static CMFCVisualManager* __stdcall GetInstance()
{
if (m_pVisManager != NULL)
{
ASSERT_VALID(m_pVisManager);
return m_pVisManager;
}

if (m_pRTIDefault == NULL)
{
m_pVisManager = new CMFCVisualManager;                  //内存泄露代码
}
else
{
m_pVisManager = (CMFCVisualManager*) m_pRTIDefault->CreateObject();
ASSERT_VALID(m_pVisManager);
}

m_pVisManager->m_bAutoDestroy = TRUE;
m_pVisManager->OnUpdateSystemColors();

return m_pVisManager;
}

对VC 2010的此问题,可以使用下面的方法修复:
在C××App中,重载虚函数ExitInstance,并加入如下代码:

int C××App::ExitInstance()
{
CMFCVisualManager * pVisualManager=CMFCVisualManager::GetInstance();
if (pVisualManager!=NULL)
{
delete pVisualManager;
}

return __super::ExitInstance();
}


BY:zhanyonhu
  评论这张
 
阅读(1513)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016