From ce97ebfdb0a80be70098dabcd157a304eb047ce1 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Sun, 1 May 2011 07:52:17 +0000
Subject: [PATCH] fix memory leak

[[Imported from SVN: r7229]]
---
 dune/gfe/targetspacertrsolver.cc | 8 ++++----
 dune/gfe/targetspacertrsolver.hh | 8 ++++++++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/dune/gfe/targetspacertrsolver.cc b/dune/gfe/targetspacertrsolver.cc
index 57c2168e..171d3f46 100644
--- a/dune/gfe/targetspacertrsolver.cc
+++ b/dune/gfe/targetspacertrsolver.cc
@@ -30,14 +30,14 @@ setup(const AverageDistanceAssembler<TargetSpace>* assembler,
     // ////////////////////////////////
 
     // First create a Gauss-seidel base solver
-    TrustRegionGSStep<MatrixType, CorrectionType>* innerSolverStep = new TrustRegionGSStep<MatrixType, CorrectionType>;
+    innerSolverStep_ = std::auto_ptr<TrustRegionGSStep<MatrixType, CorrectionType> >(new TrustRegionGSStep<MatrixType, CorrectionType>);
 
-    EnergyNorm<MatrixType, CorrectionType>* energyNorm = new EnergyNorm<MatrixType, CorrectionType>(*innerSolverStep);
+    energyNorm_ = std::auto_ptr<EnergyNorm<MatrixType, CorrectionType> >(new EnergyNorm<MatrixType, CorrectionType>(*innerSolverStep_.get()));
 
-    innerSolver_ = std::auto_ptr< ::LoopSolver<CorrectionType> >(new ::LoopSolver<CorrectionType>(innerSolverStep,
+    innerSolver_ = std::auto_ptr< ::LoopSolver<CorrectionType> >(new ::LoopSolver<CorrectionType>(innerSolverStep_.get(),
                                                                                                   innerIterations,
                                                                                                   innerTolerance,
-                                                                                                  energyNorm,
+                                                                                                  energyNorm_.get(),
                                                                                                   Solver::QUIET));
 
     innerSolver_->useRelativeError_ = false;
diff --git a/dune/gfe/targetspacertrsolver.hh b/dune/gfe/targetspacertrsolver.hh
index cb6928b4..2ca7577c 100644
--- a/dune/gfe/targetspacertrsolver.hh
+++ b/dune/gfe/targetspacertrsolver.hh
@@ -5,6 +5,8 @@
 
 #include <dune/solvers/common/boxconstraint.hh>
 #include <dune/solvers/solvers/loopsolver.hh>
+#include <dune/solvers/iterationsteps/trustregiongsstep.hh>
+#include <dune/solvers/norms/energynorm.hh>
 
 /** \brief Riemannian trust-region solver for geodesic finite-element problems */
 template <class TargetSpace>
@@ -73,6 +75,12 @@ protected:
     /** \brief The solver for the quadratic inner problems */
     std::auto_ptr< ::LoopSolver<CorrectionType> > innerSolver_;
 
+    /** \brief The iteration step for the quadratic inner problems */
+    std::auto_ptr<TrustRegionGSStep<MatrixType, CorrectionType> > innerSolverStep_;
+    
+    /** \brief Norm for the quadratic inner problems */
+    std::auto_ptr<EnergyNorm<MatrixType, CorrectionType> > energyNorm_;
+    
 //     /** \brief Dummy field for the trustregiongsstep */
 //     Dune::BitSetVector<blocksize> dummyObstacle_;
 
-- 
GitLab