в одной из экспортируемых функций выделяю по new , но не освобождаю память, в конце программы получаю:
Detected memory leaks!
Dumping objects ->
e:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {171} normal block at 0x010C9008, 50 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Как заставить отображаться имя файла и номер строки места выделения памяти в моем файле, как это нарисовано в статье?
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 используешь, верно? Попробуй добавить нечто вроде
Все ОК, за исключением небольшой очипатки — lpszFileName вместо pszFileName (или наоборот).
Как я понял, если надо отследить malloc над ним надо надругаться аналогичным образом?
O$>Все ОК, за исключением небольшой очипатки — lpszFileName вместо pszFileName (или наоборот).
O$>Как я понял, если надо отследить malloc над ним надо надругаться аналогичным образом?
malloc и так должен работать нормально. Посмотри внимательно определения в crtdbg.h по этому поводу, сразу поймешь в чем дело.
Здравствуйте Alex Fedotov, Вы писали:
AF>malloc и так должен работать нормально. Посмотри внимательно определения в crtdbg.h по этому поводу, сразу поймешь в чем дело.
Посмотрел. Так этот crtdbg.h надо вставлять в каждый cpp чтобы срабатывали __FILE__ __LINE__ ?
Подскажите, куда это пихать надо? Если до <ctrdbg.h> то она ругается само собой, а если после вставляю — ни фига не проходит, всё тот же crtdbg.h показывает, тварь.
Re[3]: Еще про Debug CRT
От:
Аноним
Дата:
29.08.02 12:10
Оценка:
Здравствуйте Курилка, Вы писали:
К>Здравствуйте Alex Fedotov, Вы писали:
AF>>Здравствуйте Odi$$ey, Вы писали:
AF>>Ты operator new используешь, верно? Попробуй добавить нечто вроде
AF>>
К>Подскажите, куда это пихать надо? Если до <ctrdbg.h> то она ругается само собой, а если после вставляю — ни фига не проходит, всё тот же crtdbg.h показывает, тварь.
Нет ну а вопрос то открытый :???:
Есть еще средства?
O$>Все ОК, за исключением небольшой очипатки — lpszFileName вместо pszFileName (или наоборот).
O$>Как я понял, если надо отследить malloc над ним надо надругаться аналогичным образом?
The Debug versions of the C run-time library contain Debug versions of the C++ new and delete operators. If your C++ code defines _CRTDBG_MAP_ALLOC, all instances of new are mapped to the Debug version, which records source file and line number information.
If you want to use the _CLIENT_BLOCK allocation type, do not define _CRTDBG_MAP_ALLOC. Instead, you must call the Debug version of the new operator directly or create macros that replace the new operator in debug mode, as shown in the following example:
/* MyDbgNew.h
Defines global operator new to allocate from
client blocks
*/
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif // _DEBUG
/* MyApp.cpp
Compile options needed: /Zi /D_DEBUG /MLd
* or use a
* Default Workspace for a Console Application to
* build a Debug version
*/
#include "crtdbg.h"
#include "mydbgnew.h"
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
void main( ) {
char *p1;
p1 = new char[40];
_CrtMemDumpAllObjectsSince( NULL );
}
The Debug version of the delete operator works with all block types and requires no changes in your program when you compile a Release version.
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>