Здравствуйте 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