以下代码竟然导致内存泄露,百思不得其解

yuucyf 2014-09-11 08:07:01
以下函数调用5000次,在任务管理器中查看内存比原来有增加,怎么会内存泄露?实在看不出问题出现在哪里?

BOOL LoadXML(LPCTSTR szFileName)
{
string sErr;
try
{
m_pSet=NULL;
m_bValid=FALSE;
m_iErrNo=0;
m_nAffected=0;
HRESULT hr=m_pSet.CreateInstance(__uuidof(Recordset));
if(FAILED(hr))
{
return FALSE;
}
hr=m_pSet->Open(szFileName, "Provider=MSPersist;", adOpenForwardOnly, adLockOptimistic, adCmdFile);
if(FAILED(hr))
return FALSE;

m_pSet->Close();
m_bValid=TRUE;
}
catch(_com_error &e)
{
ComErrorLog(e,sErr.c_str());
return FALSE;
}
return TRUE;
}
...全文
256 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
昨夜无风 2014-09-14
  • 打赏
  • 举报
回复
多次 m_pSet.CreateInstance(__uuidof(Recordset));造成的
yuucyf 2014-09-13
  • 打赏
  • 举报
回复
查询了很多资料,网上也有类似的问题,显示不会内存泄露,可是测试过程的确会泄露,奇怪!
  • 打赏
  • 举报
回复

m_pSet=NULL;
        m_bValid=FALSE;
        m_iErrNo=0;
        m_nAffected=0;
        HRESULT hr=m_pSet.CreateInstance(__uuidof(Recordset));
m_pSet 为NULL程序没崩溃?而且有CreateInstance没有对应的DestroyInstance函数.
kuankuan_qiao 2014-09-12
  • 打赏
  • 举报
回复
wqvbjhc 2014-09-12
  • 打赏
  • 举报
回复
有没有return false的情况发生。 false下你都没对m_pSet进行释放而是直接返回
coollcf 2014-09-12
  • 打赏
  • 举报
回复
最后加上这句. m_pSet.Release();
yuucyf 2014-09-12
  • 打赏
  • 举报
回复
引用 1 楼 coollcf 的回复:
最后加上这句. m_pSet.Release();
_RecordsetPtr为智能指针,不需要手动释放.
yuucyf 2014-09-12
  • 打赏
  • 举报
回复
引用 6 楼 happyparrot 的回复:
我怎么看着这段代码漏洞百出呢?
出在哪里,我刚看了也这样觉的,但是找不出内存泄露的地方,看MSDN上也有类似的代码
快乐鹦鹉 2014-09-12
  • 打赏
  • 举报
回复
我怎么看着这段代码漏洞百出呢?
yuucyf 2014-09-12
  • 打赏
  • 举报
回复
引用 2 楼 wqvbjhc 的回复:
有没有return false的情况发生。 false下你都没对m_pSet进行释放而是直接返回
m_pSet不需要m_pSet.Release();进行释放,MSDN上的例子也没有调用m_pSet.Release();

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧