From 807f26dfdfb3fa6d3b1edc1d0cda588bbd7524eb Mon Sep 17 00:00:00 2001
From: Torsten Dreyer <torsten@t3r.de>
Date: Thu, 29 Jun 2017 21:56:32 +0200
Subject: [PATCH] Fix some tiny memory leaks

---
 src/Prep/TerraFit/terrafit.cc | 25 ++++++++++---------------
 1 file changed, 10 insertions(+), 15 deletions(-)

diff --git a/src/Prep/TerraFit/terrafit.cc b/src/Prep/TerraFit/terrafit.cc
index 8cd9f8ea..4743133c 100644
--- a/src/Prep/TerraFit/terrafit.cc
+++ b/src/Prep/TerraFit/terrafit.cc
@@ -174,13 +174,11 @@ void fit_file(const SGPath& path) {
     inarray.parse(bucket);
     inarray.close();
 
-    ArrayMap *DEM=new ArrayMap(inarray);
+    ArrayMap DEM(inarray);
 
-    Terra::GreedySubdivision *mesh;
+    Terra::GreedySubdivision mesh(&DEM);
 
-    mesh=new Terra::GreedySubdivision(DEM);
-
-    greedy_insertion(mesh);
+    greedy_insertion(&mesh);
 
     gzFile fp;
     if ( (fp = gzopen( outPath.c_str(), "wb9" )) == NULL ) {
@@ -188,23 +186,20 @@ void fit_file(const SGPath& path) {
         return;
     }
 
-    gzprintf(fp,"%d\n",mesh->pointCount());
+    gzprintf(fp,"%d\n",mesh.pointCount());
 
-    for (int x=0;x<DEM->width;x++) {
-        for (int y=0;y<DEM->height;y++) {
-            if (mesh->is_used(x,y) != DATA_POINT_USED)
+    for (int x=0;x<DEM.width;x++) {
+        for (int y=0;y<DEM.height;y++) {
+            if (mesh.is_used(x,y) != DATA_POINT_USED)
                 continue;
             double vx,vy,vz;
             vx=(inarray.get_originx()+x*inarray.get_col_step())/3600.0;
             vy=(inarray.get_originy()+y*inarray.get_row_step())/3600.0;
-            vz=DEM->eval(x,y);
+            vz=DEM.eval(x,y);
             gzprintf(fp,"%+03.8f %+02.8f %0.2f\n",vx,vy,vz);
         }
     }
 
-    delete mesh;
-    delete DEM;
-
     gzclose(fp);
 }
 
@@ -352,9 +347,9 @@ int main(int argc, char** argv) {
         exit(1);
     }
 
-    std::vector<FitThread*> threads;
+    std::vector<std::shared_ptr<FitThread> > threads;
     for (unsigned int t=0; t<num_threads; ++t) {
-        FitThread* thread = new FitThread;
+        std::shared_ptr<FitThread> thread(new FitThread);
         thread->start();
         threads.push_back(thread);
     }