Не удается обнаружить утечки памяти в DLL, статически подключенных к программе на C ++

У меня есть хост-программа, которая неявно (с библиотеками и их DLL) загружает библиотеки DLL. Когда я специально делаю утечку памяти, в моей хост-программе CrtDbg* функции обнаруживают утечку. Когда я специально делаю утечку памяти в одной из DLL, утечка не обнаруживается.

Примечание: в моем хосте я активирую _CrtDumpMemoryLeaks Функция после завершения основной функции.

0

Решение

Скорее всего, ваши DLL статически связаны с CRT. (или они являются розничной сборкой, но ваш EXE-файл является сборкой отладки). В любом случае, у вас есть более чем одна куча. Когда вы вызываете _CrtDeumpMemoryLeaks, он может отслеживать только невыпущенные выделения памяти для двоичного файла, из которого сделаны вызовы. У вас есть два варианта.

  • Измените весь свой код (DLL и EXE), чтобы он связывался с той же DLL-библиотекой MSVCRT, а не со статической связью. В настройках проекта для каждого двоичного файла выберите «Многопоточная DLL-библиотека отладки» или «Многопоточная DLL» в качестве типа связи с CRT. Не выбирай статичный. Тогда все библиотеки DLL и EXE будут использовать одну и ту же кучу.

ИЛИ ЖЕ

  • Экспортируйте функцию из каждой библиотеки DLL с именем «DetectMemoryLeaks» (или функцию с аналогичным именем для других библиотек DLL, чтобы не было конфликта имен). Эта функция просто вызывает _CrtDumpMemoryLeaks. Из вашего EXE-файла вызывайте эту функцию примерно в то же время, когда вы вызываете _CrtDumpMemoryLeaks. Каждая куча из каждой DLL будет проверена на утечки.
3

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector