From b69b5acda34b42027efe5cde9b81c0d7b9cc8bd6 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Thu, 13 Aug 2015 17:09:52 +0200
Subject: [PATCH] FIX Segfault

change from pointer to unique_ptr fixes segfault.
---
 ProcessLib/ProcessVariable.cpp | 16 ++--------------
 ProcessLib/ProcessVariable.h   | 14 +++++++-------
 2 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp
index 8495f5a2118..aac8b94016b 100644
--- a/ProcessLib/ProcessVariable.cpp
+++ b/ProcessLib/ProcessVariable.cpp
@@ -42,8 +42,7 @@ ProcessVariable::ProcessVariable(
             config.get<std::string>("initial_condition.type");
         if (type == "Uniform")
         {
-            _initial_condition =
-                new UniformInitialCondition(ic_config->second);
+            _initial_condition.reset(new UniformInitialCondition(ic_config->second));
         }
         else
         {
@@ -96,17 +95,6 @@ ProcessVariable::ProcessVariable(
     }
 }
 
-ProcessVariable::~ProcessVariable()
-{
-    delete _initial_condition;
-
-    for(auto p : _dirichlet_bcs)
-        delete p;
-
-    for(auto p : _neumann_bc_configs)
-        delete p;
-}
-
 std::string const& ProcessVariable::getName() const
 {
     return _name;
@@ -121,7 +109,7 @@ void ProcessVariable::initializeDirichletBCs(
     MeshGeoToolsLib::MeshNodeSearcher& searcher,
     std::vector<std::size_t>& global_ids, std::vector<double>& values)
 {
-    for (UniformDirichletBoundaryCondition* bc : _dirichlet_bcs)
+    for (auto& bc : _dirichlet_bcs)
         bc->initialize(searcher, global_ids, values);
 }
 
diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h
index 7421eb48da5..47fc156d538 100644
--- a/ProcessLib/ProcessVariable.h
+++ b/ProcessLib/ProcessVariable.h
@@ -12,7 +12,8 @@
 
 #include <boost/property_tree/ptree.hpp>
 
-
+#include "InitialCondition.h"
+#include "UniformDirichletBoundaryCondition.h"
 #include "NeumannBc.h"
 
 namespace MeshGeoToolsLib
@@ -46,12 +47,11 @@ namespace ProcessLib
 class ProcessVariable
 {
     using ConfigTree = boost::property_tree::ptree;
+
 public:
     ProcessVariable(ConfigTree const& config, MeshLib::Mesh const& mesh,
             GeoLib::GEOObjects const& geometries);
 
-    ~ProcessVariable();
-
     std::string const& getName() const;
 
     /// Returns a mesh on which the process variable is defined.
@@ -66,7 +66,7 @@ public:
         GlobalSetup const&,
         Args&&... args)
     {
-        for (NeumannBcConfig* config : _neumann_bc_configs)
+        for (auto& config : _neumann_bc_configs)
         {
             config->initialize(searcher);
             bcs = new NeumannBc<GlobalSetup>(*config, std::forward<Args>(args)...);
@@ -76,9 +76,9 @@ public:
 private:
     std::string const _name;
     MeshLib::Mesh const& _mesh;
-    InitialCondition* _initial_condition;
-    std::vector<UniformDirichletBoundaryCondition*> _dirichlet_bcs;
-    std::vector<NeumannBcConfig*> _neumann_bc_configs;
+    std::unique_ptr<InitialCondition> _initial_condition;
+    std::vector<std::unique_ptr<UniformDirichletBoundaryCondition> > _dirichlet_bcs;
+    std::vector<std::unique_ptr<NeumannBcConfig> > _neumann_bc_configs;
 };
 
 }   // namespace ProcessLib
-- 
GitLab