21 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__)
23 #ifndef MEMORYCHECKER_ON
24 #define MEMORYCHECKER_ON
30 void memchecker_insert_stack(
void* ptr,
char** strings,
size_t size);
31 void memchecker_remove_stack(
void* ptr);
32 void memory_checker_print_report();
33 void memory_checker_clear_report();
35 inline void*
operator new(
size_t size)
throw(std::bad_alloc) {
36 void *ptr = (
void *)malloc(size);
38 void* stack_array[10];
39 size_t stack_size = backtrace(stack_array,10);
40 char** stack_data = backtrace_symbols(stack_array,stack_size);
41 memchecker_insert_stack(ptr,stack_data,stack_size);
46 inline void*
operator new[](
size_t size)
throw(std::bad_alloc) {
47 void *ptr = (
void *)malloc(size);
49 void* stack_array[10];
50 size_t stack_size = backtrace(stack_array,10);
51 char** stack_data = backtrace_symbols(stack_array,stack_size);
52 memchecker_insert_stack(ptr,stack_data,stack_size);
57 inline void operator delete(
void *ptr)
throw() {
58 memchecker_remove_stack(ptr);
62 inline void operator delete[](
void *ptr)
throw() {
63 memchecker_remove_stack(ptr);
68 #endif // MEMORYCHECKER_ON