我正在分析由调试器创建的内存转储。它显示了导致内存泄漏的CreateErrorinfo方法调用,如下所示,
我对mydll和mydll都使用了适当的地图文件。CreateErrorInfo的含义是什么?怎么会导致内存泄漏?
函数源目的地mfc90u!运算符new+33
mfc90u!CPlex::Create+1f mfc90u!接线员新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
发布于 2015-10-27 09:04:51
这与不发布接口有关吗?来自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
}
https://stackoverflow.com/questions/23212380
复制相似问题