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