From d38f2121de22d9ed75e19145d17b098b2b0d63e7 Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-bs.de>
Date: Thu, 30 Mar 2023 09:17:10 +0000
Subject: [PATCH] Fix some memory leaks in DistributionHelper

---
 src/gpu/GridGenerator/grid/Grid.h                         | 2 +-
 src/gpu/GridGenerator/grid/GridImp.cpp                    | 3 ++-
 src/gpu/GridGenerator/grid/GridImp.h                      | 2 +-
 src/gpu/GridGenerator/grid/distributions/Distribution.cpp | 4 ++--
 src/gpu/GridGenerator/grid/distributions/Distribution.h   | 4 ++--
 5 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
index db8b883ee..b77d3de8c 100644
--- a/src/gpu/GridGenerator/grid/Grid.h
+++ b/src/gpu/GridGenerator/grid/Grid.h
@@ -101,7 +101,7 @@ public:
     virtual uint *getFC_offset() const = 0;
 
     virtual real *getDistribution() const = 0;
-    virtual int* getDirection() const = 0;
+    virtual const std::vector<int> &getDirection() const = 0;
     virtual int getStartDirection() const = 0;
     virtual int getEndDirection() const = 0;
 
diff --git a/src/gpu/GridGenerator/grid/GridImp.cpp b/src/gpu/GridGenerator/grid/GridImp.cpp
index 3ca142750..cec996774 100644
--- a/src/gpu/GridGenerator/grid/GridImp.cpp
+++ b/src/gpu/GridGenerator/grid/GridImp.cpp
@@ -36,6 +36,7 @@
 #include <sstream>
 # include <algorithm>
 #include <cmath>
+#include <vector>
 
 #include "global.h"
 
@@ -1762,7 +1763,7 @@ real* GridImp::getDistribution() const
     return this->distribution.f;
 }
 
-int* GridImp::getDirection() const
+const std::vector<int>& GridImp::getDirection() const
 {
     return this->distribution.dirs;
 }
diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
index b88e99448..54ea74850 100644
--- a/src/gpu/GridGenerator/grid/GridImp.h
+++ b/src/gpu/GridGenerator/grid/GridImp.h
@@ -243,7 +243,7 @@ public:
     uint getSparseSize() const override;
     int getSparseIndex(uint matrixIndex) const override;
     real* getDistribution() const override;
-    int* getDirection() const override;
+    const std::vector<int>& getDirection() const override;
     int getStartDirection() const override;
     int getEndDirection() const override;
 
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
index a6e11ac90..31d2e2f8a 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
@@ -46,9 +46,9 @@ Distribution DistributionHelper::getDistribution27()
     d27.dir_start = STARTDIR;
     d27.dir_end = ENDDIR;
 
-    d27.dirs = new int[(ENDDIR + 1) * DIMENSION];
+    d27.dirs.resize((ENDDIR + 1) * DIMENSION);
 
-    d27.directions = new Direction[ENDDIR + 1];
+    d27.directions.resize(ENDDIR + 1);
     d27.directions[DIR_P00] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z);
     d27.directions[DIR_M00] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z);
     d27.directions[DIR_0P0] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z);
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.h b/src/gpu/GridGenerator/grid/distributions/Distribution.h
index 7982abc23..39cea3747 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.h
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.h
@@ -73,8 +73,8 @@ struct Distribution
     typedef const Direction* const_iterator;
 
     real* f;
-    int *dirs;
-    Direction* directions;
+    std::vector<int> dirs;
+    std::vector<Direction> directions;
     int dir_start;
     int dir_end;
     const char* name;
-- 
GitLab