From eeda59a190704b955fae4530f0899b794ff9d6b6 Mon Sep 17 00:00:00 2001 From: Jochem Snuverink <jochem.snuverink@psi.ch> Date: Wed, 22 Jul 2020 11:19:45 +0200 Subject: [PATCH] fix memory errors in unit tests as reported by valgrind: initialise array, check for container end, array deletion --- ippl/src/Field/LField.hpp | 2 +- ippl/src/SubField/SubFieldIter.h | 18 ++++++++++++++---- .../Fields/Interpolation/NDGridTest.cpp | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ippl/src/Field/LField.hpp b/ippl/src/Field/LField.hpp index ba8d22ca3..bf8b8a4db 100644 --- a/ippl/src/Field/LField.hpp +++ b/ippl/src/Field/LField.hpp @@ -714,7 +714,7 @@ LField<T,Dim>::allocateStorage(int newsize) // Allocate the storage, creating some extra to account for offset, and // then add in the offset. - P = new T[newsize + extra]; + P = new T[newsize + extra](); P += extra; ADDIPPLSTAT(incLFieldBytes, (newsize+extra)*sizeof(T)); diff --git a/ippl/src/SubField/SubFieldIter.h b/ippl/src/SubField/SubFieldIter.h index 2e6457fde..34e3a74e1 100644 --- a/ippl/src/SubField/SubFieldIter.h +++ b/ippl/src/SubField/SubFieldIter.h @@ -127,7 +127,11 @@ public: MyDomain(&(const_cast<S&>(s))), CurrentLField(ldf), MyBrackets(B) { - LFPtr = (*CurrentLField).second.get(); + if (CurrentLField != getBareField().end_if()) { + LFPtr = (*CurrentLField).second.get(); + } else { + LFPtr = nullptr; + } } // Default constructor @@ -156,9 +160,15 @@ public: // Go to the next LField. typename BareField<T,Dim>::iterator_if nextLField() { - ++CurrentLField; - LFPtr = (*CurrentLField).second.get(); - return CurrentLField; + if (CurrentLField != getBareField().end_if()) { + ++CurrentLField; + } + if (CurrentLField != getBareField().end_if()) { + LFPtr = (*CurrentLField).second.get(); + } else { + LFPtr = nullptr; + } + return CurrentLField; } // Return the LField pointed to by LFPtr diff --git a/tests/classic_src/Fields/Interpolation/NDGridTest.cpp b/tests/classic_src/Fields/Interpolation/NDGridTest.cpp index f7791fa79..6753c036f 100644 --- a/tests/classic_src/Fields/Interpolation/NDGridTest.cpp +++ b/tests/classic_src/Fields/Interpolation/NDGridTest.cpp @@ -148,7 +148,7 @@ TEST_F(NDGridTest, CoordVectorTest) { // and newCoordArray EXPECT_NEAR(coords_v[j], gridCoordinates[i][j], 1e-12); EXPECT_NEAR(coords_a[j], gridCoordinates[i][j], 1e-12); } - delete coords_a; + delete[] coords_a; } } -- GitLab