Работаю под Visual Studio. Как узнать, есть ли в программе утечка памяти или нет?
Возможно обнаружение утечек памяти с помощью отладчика и отладочных функций кучи библиотеки CRT (библиотеки времени выполнения). Включаются они так:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
Важно, что инструкции include
/define
следуют в таком порядке.
Включение заголовочного файла <crtdbg.h>
сопоставляет функции malloc
и free
с их отладочными версиями: _malloc_dbg
и free
. Инструкция define
позволит сделать дамп утечки памяти более подробным (вообще говоря, она сопоставляет базовые версии функций кучи CRT соответствующим отладочным версиям).
Далее помещаем вызов _CrtDumpMemoryLeaks
перед точкой выхода приложения для отображения отчета об утечке памяти перед завершением работы приложения:
_CrtDumpMemoryLeaks();
Если точек выхода несколько, нет нужды писать вызов этой функции повсеместно. Достаточно вызвать в начале работы приложения функцию _CrtSetDbgFlag
, что приведет к автоматическому вызову функции _CrtDumpMemoryLeaks
в каждой точке выхода. Для этого надо установить значения двух битовых полей:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
По умолчанию _CrtDumpMemoryLeaks
выводит отчет об утечке памяти в область Отладка окна Вывод.
Далее смотрите полученные данные, там четко указывается тип блока, его расположение, размер утечки и еще некоторая информация. Блоки бывают разных типов (см. справку CRT).
Примечание: В некоторых случаях _CrtDumpMemoryLeaks
может ошибочно диагностировать утечку памяти, но я не буду здесь расписывать данные ситуации, если потребуется или Вы не разберетесь самостоятельно - пишите комментарии;)
Используйте встроенный профилировщик памяти.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! На сайте есть <select> необходимо переделать его под бутстраповский dropdown (не спрашивайте зачем))Т