воскресенье, 1 апреля 2012 г.

Visual Studio, C++ и утечка памяти

Если уж случилось такое горе, то вот краткая инструкция:
1) До подключения первого хедера пишем:

#define _CRTDBG_MAP_ALLOC
#include
#include
#ifndef DBG_NEW
      #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
      #define new DBG_NEW
#endif

Тут мы подключаем необходимое, а именно замену для стандартного malloc и компании, которые будут вести учет выделений и освобождений памяти.
2) Первой инструкцией программы ставим: 
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);

Это задает параметры работы профилировщика памяти. параметров там куча, поэтому читаем их сами.
3) запускаем. После закрытия программы в окне Visual Studio "Output" будет выведено примерно следующее:
Programm.cpp(2532) : {29721} normal block at 0x00000000040812E0, 193168 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Programm.cpp(1713) : {29714} normal block at 0x0000000003F06460, 48292 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Это имя файла, строка, адрес и прочее. при двойном клике по строке студия сама переключится на это место.


Комментариев нет:

Отправить комментарий