From 951c9fa9d9ff06dbab47b86f6d34307abb59cbf2 Mon Sep 17 00:00:00 2001 From: berenger-bramas <berenger-bramas@2616d619-271b-44dc-8df4-d4a8f33a7222> Date: Mon, 20 Feb 2012 17:02:14 +0000 Subject: [PATCH] Remove memory leaks (two forgotten deletes). git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/scalfmm/scalfmm/trunk@412 2616d619-271b-44dc-8df4-d4a8f33a7222 --- Src/Containers/FOctree.hpp | 1 + Src/Utils/FSmartPointer.hpp | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Src/Containers/FOctree.hpp b/Src/Containers/FOctree.hpp index 738b4ed92..644411a7c 100644 --- a/Src/Containers/FOctree.hpp +++ b/Src/Containers/FOctree.hpp @@ -119,6 +119,7 @@ public: /** Desctructor */ virtual ~FOctree() { delete [] boxWidthAtLevel; + delete root; } /** To get the tree height */ diff --git a/Src/Utils/FSmartPointer.hpp b/Src/Utils/FSmartPointer.hpp index 7d92032a4..35fdb695f 100644 --- a/Src/Utils/FSmartPointer.hpp +++ b/Src/Utils/FSmartPointer.hpp @@ -25,7 +25,7 @@ public: } /** Constructor from the memory pointer */ - FSmartPointer(ClassType* const inPointer) : pointer(0), counter(0) { + explicit FSmartPointer(ClassType* const inPointer) : pointer(0), counter(0) { assign(inPointer); } @@ -52,9 +52,11 @@ public: /** Point to a new pointer, release if needed */ void assign(ClassType* const inPointer){ release(); - pointer = inPointer; - counter = new int; - (*counter) = 1; + if( inPointer ){ + pointer = inPointer; + counter = new int; + (*counter) = 1; + } } /** Point to a new pointer, release if needed */ @@ -62,16 +64,17 @@ public: release(); pointer = inPointer.pointer; counter = inPointer.counter; - if(counter) (*counter) = (*counter) + 1; + if(counter) (*counter) += 1; } /** Dec counter and Release the memory last */ void release(){ if(counter){ - (*counter) = (*counter) - 1; + (*counter) -= 1; if( (*counter) == 0 ){ if(MemoryType == FSmartArrayMemory) delete[] pointer; else if(MemoryType == FSmartPointerMemory) delete pointer; + delete counter; } pointer = 0; counter = 0; -- GitLab