1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
/******************************************************************************
* Copyright (c) 2000-2021 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* Balasko, Jeno
* Raduly, Csaba
* Szabo, Janos Zoltan – initial implementation
*
******************************************************************************/
#include "dbgnew.hh"
#include <stddef.h>
#undef new
static void *dummy = NULL;
void *operator new(size_t size)
{
return Malloc(size);
}
void *operator new[](size_t size)
{
if (size == 0) return &dummy;
else return Malloc(size);
}
void operator delete(void *ptr)
{
Free(ptr);
}
void operator delete(void *ptr, std::size_t)
{
Free(ptr);
}
void operator delete[](void *ptr)
{
if (ptr != static_cast<void*>(&dummy)) Free(ptr);
}
void operator delete[](void *ptr, std::size_t)
{
if (ptr != static_cast<void*>(&dummy)) Free(ptr);
}
/**************************************************************************/
#ifdef MEMORY_DEBUG
// overloads for memory debug
void* operator new(size_t size, const char* file, int line)
{
return Malloc_dbg(file, line, size);
}
void* operator new[](size_t size, const char* file, int line)
{
if (size == 0) return &dummy;
else return Malloc_dbg(file, line, size);
}
void* operator new(size_t size, const std::nothrow_t&, const char* file, int line)
{
return Malloc_dbg(file, line, size);
}
void* operator new[](size_t size, const std::nothrow_t&, const char* file, int line)
{
if (size == 0) return &dummy;
else return Malloc_dbg(file, line, size);
}
#if __cplusplus >= 201703L
void* operator new(size_t size, std::align_val_t, const char* file, int line)
{
return Malloc_dbg(file, line, size);
}
void* operator new[](size_t size, std::align_val_t, const char* file, int line)
{
if (size == 0) return &dummy;
else return Malloc_dbg(file, line, size);
}
#endif // C++11
int debug_new_counter_t::count = 0; // initial value
#if defined(__CYGWIN__) || defined(INTERIX)
extern char**__argv;
#else
const char * __argv [] __attribute__((weak)) =
{
"program"
};
#endif
const char * debug_new_counter_t::progname = __argv[0];
debug_new_counter_t::debug_new_counter_t()
{
++count;
}
debug_new_counter_t::~debug_new_counter_t()
{
if (--count == 0) {
check_mem_leak(progname);
}
}
void debug_new_counter_t::set_program_name(const char * pgn)
{
progname = pgn;
}
#endif // MEMORY_DEBUG
|