从debugdiag分析时,CreateErrorInfo上的内存泄漏?

时间:2014-04-22 06:47:28

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

我正在分析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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

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