0

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

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

函数 源 目标 mfc90u!operator new+33
mfc90u!CPlex::Create+1f mfc90u!operator new kernel32!TlsSetValueStub
kernel32!TlsSetValueStub
MYANOTHERDLLCreateErrorInfo +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

4

2 回答 2

2

这与不发布接口有关吗?来自 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
}
于 2015-10-27T09:04:51.637 回答
0

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

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

于 2014-04-22T06:58:56.017 回答