Irbis
Irbis

Reputation: 1511

_CRTDBG_MAP_ALLOC not showing file name and line number

I use Visual Studio 2017. I work with a dynamic library which dumps memory leaks:_CrtDumpMemoryLeaks(); I have added an appropriate macro definition:

#define _CRTDBG_MAP_ALLOC

but an output still doesn't contain a file name and line number. When I debug that dll I can step into the following malloc definition:

//
// 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
}

In the other hand when I create a simple console application in Visual Studio I can't step into malloc but then memory leak output shows file name and line number. What's going on ? How to fix that ?

Upvotes: 0

Views: 1174

Answers (1)

Dmitry Sokolov
Dmitry Sokolov

Reputation: 3190

The technique described in the docs Find memory leaks with the CRT library.

The key point is in that you need to add the following 3 lines before any #include:

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

Upvotes: 2

Related Questions