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