From be6681d3f0dbdef285017ccc60d999072d870fb5 Mon Sep 17 00:00:00 2001 From: llsth Date: Fri, 10 Apr 2015 15:41:52 +0200 Subject: [PATCH] Fixed memory bug --- lib/clib/mem.c | 23 +++++++++++++++++++++++ lib/platform.h | 18 ++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/clib/mem.c b/lib/clib/mem.c index a00abea3..76e247eb 100644 --- a/lib/clib/mem.c +++ b/lib/clib/mem.c @@ -43,6 +43,29 @@ #define Debug(x,y,z,w) #endif +#ifdef __cplusplus +#if (__GNUC__ > 2) +#include +void* operator new (size_t size) throw(std::bad_alloc) { + return AllocMemSafe(size); +} + +void* operator new[] (size_t size) throw(std::bad_alloc) { + return AllocMemSafe(size); +} + +void operator delete (void* ptr) throw() { + FreeMemSafe(ptr); +} + +void operator delete[] (void* ptr) throw() { + FreeMemSafe(ptr); +} +#else + +#endif +#endif + struct MemoryBlock { struct MemoryBlock *next; diff --git a/lib/platform.h b/lib/platform.h index 49caedbc..a668bb03 100644 --- a/lib/platform.h +++ b/lib/platform.h @@ -28,6 +28,7 @@ #define AMATH_LIB_PLATFROM_H #include +#include "mem.h" #define EMPTYSTRING "" #define SPACE " " @@ -128,6 +129,23 @@ typedef u_int16_t uint16_t; typedef u_int32_t uint32_t; typedef u_int64_t uint64_t; # define IPTR LONG* +#ifdef __cplusplus +inline void* operator new (size_t size) { + return AllocMemSafe(size); +} + +inline void* operator new[] (size_t size) { + return AllocMemSafe(size); +} + +inline void operator delete (void* ptr) { + FreeMemSafe(ptr); +} + +inline void operator delete[] (void* ptr) { + FreeMemSafe(ptr); +} +#endif #endif #if defined(ANSICONSOLE)