From 81e26fe9b96b295896bb4d5d596072fea19168d2 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 2 Feb 2014 00:00:31 +0000 Subject: [PATCH] Fixed the free and delete mismatch problem. https://github.com/msgpack/msgpack-c/issues/52 --- src/msgpack/zone.hpp.erb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/msgpack/zone.hpp.erb b/src/msgpack/zone.hpp.erb index c6f5481a..705dd34c 100644 --- a/src/msgpack/zone.hpp.erb +++ b/src/msgpack/zone.hpp.erb @@ -44,7 +44,17 @@ public: void clear(); void swap(zone& o); - + static void* operator new(std::size_t size) throw(std::bad_alloc) + { + void* p = ::malloc(size); + if (!p) throw std::bad_alloc(); + return p; + } + static void operator delete(void *p) throw() + { + if (!p) return; + ::free(p); + } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> T* allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>);