Re[9]: Проблема с отловом утечек памяти
От: IamLexa  
Дата: 19.08.04 14:14
Оценка:
Здравствуйте, Trapper, Вы писали:

IL>>вообще-то странно. а не пробовал просто позвать

IL>>
IL>> _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
IL>>

IL>>из DllMain или (Win)Main или чего там вместо них в MFC?
IL>>по идее при завершении программы должена быть ввыведена инф-ция о мемори-ликах.
IL>>может не будет номеров строк и файлов -- можно изловчиться и без этого обойтись.


T>Ты будешь долго смеяться, но я вызываю эту функцию при старте приложения в CMyApp::CMyApp()

T>Определённый дамп я получаю в окно Output, но без информации о номере строки и имени файла. Проект большой, гадать не хочется

а чего гадать? номер неосвобожденного блока тебе в логе пишут.
поэтому можно поставить условный breakpoint в файле dbgheap.c в функции _heap_alloc_dbg:

431:       pHead->pBlockHeaderNext = _pFirstBlock;
432:       pHead->pBlockHeaderPrev = NULL;
433:       pHead->szFileName = (char *)szFileName;
434:       pHead->nLine = nLine;
435:       pHead->nDataSize = nSize;
436:       pHead->nBlockUse = nBlockUse;
437:       pHead->lRequest = lRequest; // <--- здесь! lRequest -- это номер блока


условный breakpoint типа "lRequest = 777".
Поэтому после запуска программы останавливаешься в момент выделения этого блока -- а потом выясняешь, почему ты его не удалил.

PS. dbgheap.cpp лежит в каталоге Visual Studio Dir\Vc7\crt\src\dbgheap.c
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.