Утечка памяти на CreateErrorInfo при анализе из debugdiag?

Я анализирую дамп памяти, созданный debugdiag. Он показывает вызов метода CreateErrorinfo, который приводит к утечке памяти, как показано ниже,

Я использую правильные файлы карты для mydll и myanotherdll оба. В чем смысл CreateErrorInfo? как это приводит к утечке памяти?

Назначение источника функции
оператор mfc90u! новый + 33
mfc90u! CPlex :: Создать + 1f mfc90u! оператор 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

0

Решение

Это связано с не выпуском интерфейса? Интерфейс из 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

Другие решения

CreateErrorInfo создает экземпляр универсального объекта ошибки.

Эта функция возвращает указатель на общий объект ошибки, который вы можете использовать с QueryInterface в ICreateErrorInfo для установки его содержимого. Я считаю, что вы должны проверить состояние указателя ICreateErrorInfo для более подробной информации в вашем коде.

0

По вопросам рекламы [email protected]