Re: Еще про Debug CRT
От: Alex Fedotov США  
Дата: 11.12.01 05:10
Оценка: 18 (2)
Здравствуйте 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$>Как заставить отображаться имя файла и номер строки места выделения памяти в моем файле, как это нарисовано в статье?

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

#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) && defined(__cplusplus) && !defined(_DEBUG_NEW)
    inline void* __cdecl operator new(size_t nSize, const char * pszFileName, int nLine)
    {    return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine); }
#    define _DEBUG_NEW new(__FILE__, __LINE__)
#    define new _DEBUG_NEW
#endif
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.