【问题标题】:Memory leak on CreateErrorInfo when analyze from debugdiag?从调试诊断分析时 CreateErrorInfo 上的内存泄漏?
【发布时间】:2014-04-22 06:47:28
【问题描述】:

我正在分析 debugdiag 创建的内存转储。它显示了导致内存泄漏的 CreateErrorinfo 方法调用,如下所示,

我正在为 mydll 和 myanotherdll 使用正确的映射文件。 CreateErrorInfo 的含义是什么?它是如何导致内存泄漏的?

函数源目标 mfc90u!operator new+33
mfc90u!CPlex::Create+1f mfc90u!operator new kernel32!TlsSetValueStub
kernel32!TlsSetValueStub
MYANOTHERDLL!CreateErrorInfo+188e2
MYDLL!MyClas::OnTimer+a3 ......\myfile.cpp @ 4639
MYDLL!CMainFrame::OnTimer+71 ......\mainfrm.cpp @ 1246
mfc90u!CWnd::OnWndMsg+407
mfc90u!AfxCallWndProc+a3
user32!MDIClientWndProcW
mfc90u!__sse2_available_init+657b
mfc90u!CWnd::WindowProc+24
mfc90u!AfxCallWndProc+a3
mfc90u!AfxWndProc+37 mfc90u!AfxCallWndProc mfc90u!AfxWndProcBase+56 mfc90u!AfxWndProc mfc90u!AfxWndProcBase

【问题讨论】:

  • 向我们展示 MyClas::OnTimer 的代码。也许你没有释放你得到的接口指针。

标签: c++ visual-c++ memory-leaks mfc debugdiag


【解决方案1】:

这与不释放接口有关吗?来自 CreatorErroInfo 的接口必须由客户端发布:

ICreateErrorInfo* pErrorInfo = nullptr;
HRESULT hr = ::CreateErrorInfo(&pErrorInfo);

if (pErrorInfo)
{
   pErrorInfo->Release();
}

更好地使用 ATL 的智能指针:

CComPtr<ICreateErrorInfo> ptrErrorInfo;
HRESULT hr = ::CreateErrorInfo(&ptrErrorInfo);

if (ptrErrorInfo)
{
   //no release necessary
}

【讨论】:

    【解决方案2】:

    CreateErrorInfo 创建一个通用错误对象的实例。

    此函数返回一个指向通用错误对象的指针,您可以将其与 ICreateErrorInfo 上的 QueryInterface 一起使用来设置其内容。我相信您应该检查 ICreateErrorInfo 指针的状态以获取代码中的更多详细信息。

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2012-10-09
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多