Re[2]: Еще про Debug CRT
От: denisov  
Дата: 30.08.02 12:44
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте Odi$$ey, Вы писали:


O$>>Опять же по статье Обнаружение и локализация утечек памяти
Автор(ы): Эдвард Райт

Статья посвящена проблеме, которая постоянно преследует программистов на C/C++, — обнаружению и локализации утечек памяти. Автор демонстрирует применение средств библиотеки времени выполнения (CTR), поставляемой с Visual C++, с помощью которых утечки памяти можно устранить гораздо быстрее и проще, чем методом "пристального взгляда".
;)

O$>>Проект — dll без MFC. Добавляю
O$>>
O$>>#define _CRTDBG_MAP_ALLOC
O$>>#include <stdlib.h>
O$>>#include <crtdbg.h>
O$>>


O$>>в DllMain вставляю
O$>>
O$>>_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF );
O$>>


O$>>в одной из экспортируемых функций выделяю по new , но не освобождаю память, в конце программы получаю:

O$>>
O$>>Detected memory leaks!
O$>>Dumping objects ->
O$>>e:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {171} normal block at 0x010C9008, 50 bytes long.
O$>>Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
O$>>


O$>>Как заставить отображаться имя файла и номер строки места выделения памяти в моем файле, как это нарисовано в статье?

AF>Ты operator new используешь, верно? Попробуй добавить нечто вроде


AF>
AF>#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) && defined(__cplusplus) && !defined(_DEBUG_NEW)
AF>    inline void* __cdecl operator new(size_t nSize, const char * pszFileName, int nLine)
AF>    {    return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine); }
AF>#    define _DEBUG_NEW new(__FILE__, __LINE__)
AF>#    define new _DEBUG_NEW
AF>#endif
AF>



Можно ли сделать нечто подобное для собственных классов:

class A;

A *ptr=new A;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.