Работаю под Visual Studio. Как узнать, есть ли в программе утечка памяти или нет?
Ответ
Возможно обнаружение утечек памяти с помощью отладчика и отладочных функций кучи библиотеки CRT (библиотеки времени выполнения). Включаются они так:
#define _CRTDBG_MAP_ALLOC
#include
Важно, что инструкции include/define следуют в таком порядке.
Включение заголовочного файла
Далее помещаем вызов _CrtDumpMemoryLeaks перед точкой выхода приложения для отображения отчета об утечке памяти перед завершением работы приложения:
_CrtDumpMemoryLeaks();
Если точек выхода несколько, нет нужды писать вызов этой функции повсеместно. Достаточно вызвать в начале работы приложения функцию _CrtSetDbgFlag, что приведет к автоматическому вызову функции _CrtDumpMemoryLeaks в каждой точке выхода. Для этого надо установить значения двух битовых полей:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
По умолчанию _CrtDumpMemoryLeaks выводит отчет об утечке памяти в область Отладка окна Вывод
Далее смотрите полученные данные, там четко указывается тип блока, его расположение, размер утечки и еще некоторая информация. Блоки бывают разных типов (см. справку CRT).
Примечание: В некоторых случаях _CrtDumpMemoryLeaks может ошибочно диагностировать утечку памяти, но я не буду здесь расписывать данные ситуации, если потребуется или Вы не разберетесь самостоятельно - пишите комментарии;)
Комментариев нет:
Отправить комментарий