_CRTDBG_MAP_ALLOC не показывает имя файла и номер строки

#c #c #memory-leaks #visual-studio-2017

#c #c #утечки памяти #visual-studio-2017

Вопрос:

Я использую Visual Studio 2017. Я работаю с динамической библиотекой, которая устраняет утечки памяти: _CrtDumpMemoryLeaks(); Я добавил соответствующее определение макроса:

 #define _CRTDBG_MAP_ALLOC
  

но вывод по-прежнему не содержит имя файла и номер строки. Когда я отлаживаю эту dll, я могу перейти в
следующее определение malloc:

 //
// malloc.cpp
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// Implementation of malloc().
//
#include <corecrt_internal.h>
#include <malloc.h>



// Allocates a block of memory of size 'size' bytes in the heap.  If allocation
// fails, nullptr is returned.
//
// This function supports patching and therefore must be marked noinline.
// Both _malloc_dbg and _malloc_base must also be marked noinline
// to prevent identical COMDAT folding from substituting calls to malloc
// with either other function or vice versa.
extern "C" _CRT_HYBRIDPATCHABLE __declspec(noinline) _CRTRESTRICT void* __cdecl malloc(size_t const size)
{
    #ifdef _DEBUG
    return _malloc_dbg(size, _NORMAL_BLOCK, nullptr, 0);
    #else
    return _malloc_base(size);
    #endif
}
  

С другой стороны, когда я создаю простое консольное приложение в Visual Studio, я не могу перейти в malloc, но затем вывод утечки памяти показывает имя файла и номер строки. Что происходит? Как это исправить?

Ответ №1:

Метод, описанный в документах, обнаруживает утечки памяти с помощью библиотеки CRT.

Ключевой момент заключается в том, что вам нужно добавить следующие 3 строки перед любым #include :

 #define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>