Из заголовочного файла <crtdbg.h>
:
#ifdef _CRTDBG_MAP_ALLOC
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
// etc...
#endif
Обратите внимание, что переопределение теперь вызывает другую версию malloc, у которой есть номер файла и строки, которые вы ищете.Понятно, что для этого вам нужно #define _CRTDBG_MAP_ALLOC и #include crtdb.h.Лучше всего это сделать в вашем предварительно скомпилированном заголовочном файле, чтобы вы могли быть уверены, что весь ваш код будет скомпилирован с этими макросами.
Это еще не гарантирует, что вы получите эту информацию.Ваш проект может использовать .lib, который был скомпилирован без него.Другим режимом сбоя являются библиотеки DLL, которые могут быть выгружены всего за до , когда вы создадите отчет об утечке.Информация о файле и строке для этой DLL также будет выгружена.
Существует запасной вариант для диагностики подобных проблем.В отчете об утечке есть строка для утечки, которая начинается с номера блока, показанного в начале внутри фигурных скобок.Пока этот номер блока стабилен между запусками, вы можете принудительно прервать отладчик при выполнении выделения.Поместите этот код в ваш метод main или в любую точку кода, которая выполняется раньше:
_crtBreakAlloc = 42; // Change the number