从debugdiag分析时CreateErrorInfo内存泄漏

Memory leak on CreateErrorInfo when analyze from debugdiag?

本文关键字:CreateErrorInfo 内存 泄漏 debugdiag      更新时间:2023-10-16

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

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

函数源目标mfc90u!操作员新+33
mfc90u!CPlex::创建+1f mfc90u!操作员新kernel32!TlsSetValueStub
kernel32!TlsSetValueStub
MYANOTHERDLL创建错误信息+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!AfxCallWndProcmfc90u!AfxWndProcBase+56 mfc90u!AfxWndProcmfc90u!AfxWndProcBase

这与不发布接口有关吗?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
}
CreateErrorInfo创建一个通用错误对象的实例。

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