Таким образом выделяется память под переменную:
VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT));
Не free, не delete не удаляют выделенную память, хотя, я могу ошибаться. Вот полный код:
VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT));
if (enumInterface->Next(1,theItem,NULL) == S_FALSE)
return false;
item = new QAxObject((IUnknown*)theItem->punkVal);
qDebug() << theItem;
free(theItem);
qDebug() << theItem;
Подскажите, пожалуйста, как исправить утечку памяти?
Память-то освобождается. А вот адрес в указателе theItem остается старый. Только теперь он указывает на мусор, а не на выделенную память. И если вы попробуете этот невалидный указатель использовать, например для записи, вашей программе может быть больно))
И, кстати, если
if (enumInterface->Next(1,theItem,NULL) == S_FALSE)
return false;
сработает, то ваш код освобождения памяти не будет выполнен. Что потенциально влечет утечку памяти. В связи с этим рекомендую ознакомиться с концепцией RAII (Resource Acquisition Is Initialization) вообще, и smart pointers в частности - как раз придумано для изящного решения подобных проблем.
И еще непонятно, почему вы юзаете malloc вместо new.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники