From 436cfdb750f463348ef10dff094cc536fd688637 Mon Sep 17 00:00:00 2001 From: Oliver Duis Date: Mon, 30 May 2011 21:54:48 +0200 Subject: [PATCH] Fixed a (severe) memleak when using HPHD (Thank Michael for narrowing down to this algo) --- rtengine/demosaic_algos.cc | 6 +----- rtengine/rawimagesource.h | 19 ++++++++++++------- rtgui/cacheimagedata.cc | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 9aedf00dc..4bd9f53dd 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -501,11 +501,7 @@ void RawImageSource::hphd_demosaic () { plistener->setProgress (0.0); } - float** hpmap = new float*[H]; - for (int i=0; i(W,H, true); #ifdef _OPENMP #pragma omp parallel diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 23c4fcc36..41c482eaa 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -26,21 +26,26 @@ namespace rtengine { -template void freeArray (T** a, int H) { - //for (int i=0; i T** allocArray (int W, int H) { +// these two functions "simulate" and jagged array, but just use two allocs +template T** allocArray (int W, int H, bool initZero=false) { T** t = new T*[H]; t[0] = new T[H*W]; + + if (initZero) memset(t[0],0,sizeof(T)*W*H); + for (int i=1; i void freeArray (T** a, int H) { + + delete [] a[0]; + delete [] a; +} + template void freeArray2 (T** a, int H) { //for (int i=0; i #include #include -#include +#include "version.h" CacheImageData::CacheImageData () : md5(""), supported(false), format(FT_Invalid), rankOld(-1), inTrashOld(false), recentlySaved(false),