Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Подсказки / Борьба с утечками памяти через проверку Heap-а.

Борьба с утечками памяти через проверку Heap-а.

Очередной способ борьбы с Memory Leak's. В Visual С есть встроенные функции для проверки Heap-a:

_CrtMemCheckpoint — запоминает текущее состояние Heap-a;

_CrtMemDifference — сравнивает два состояния памяти (полученные в результате двух вызовов _CrtMemCheckpoint) и возвращает разницу между ними

_CrtMemDumpStatistics — выдает содержимое разницы в состояниях памяти (которая получилась на выходе _CrtMemDifferencе) в читабельном виде.

Чтобы стало понятнее, пример юзания:

#include <crtdbg.h>
//...

_CrtMemState s1, s2, s3; //структуры для хранения состояния Heap-a
_CrtMemCheckpoint( &s1 ); //запоминаем состояние Heap-a

//здесь идет проверяемый код

char *c = new char[10];
 .
 .
 .
//конец проверяемого кода

_CrtMemCheckpoint( &s2 );//получаем новое состояние
if ( _CrtMemDifference( &s3, &s1, &s2 ) )
   _CrtMemDumpStatistics( &s3 );//попадаем сюда только если s1 и s2 различны

По дефолту статистика Dump-ится в окно Output, закладка Debug. Если нужно перенаправить Dump например в файл, смотри функции _CrtSetReportMode и _CrtSetReportFile. Кстати, в MFC есть класс CMemoryState, который фактически выполняет те же самые действия.

Да, все эти функции вызываются только если продефайнен _DEBUG. Более подробно смотри в MSDN, топик Visual C++ Programmer's Guide-> Run-Time Library Reference->Debug Function Reference.

25 марта 2006

#память, #утечка памяти

2001—2018 © GameDev.ru — Разработка игр