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