From be499b42d9d121d958254520fcf21b918408599e Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Mon, 31 Aug 2015 17:20:52 +0300 Subject: [PATCH] fixed memory leaks in modules/features2d/test/test_nearestneighbors.cpp --- .../test/test_lshindex_flannbased_matcher.cpp | 12 +++++++++++- modules/features2d/test/test_nearestneighbors.cpp | 13 ++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/modules/features2d/test/test_lshindex_flannbased_matcher.cpp b/modules/features2d/test/test_lshindex_flannbased_matcher.cpp index ddc81b0c5d..d1c6ea7e43 100644 --- a/modules/features2d/test/test_lshindex_flannbased_matcher.cpp +++ b/modules/features2d/test/test_lshindex_flannbased_matcher.cpp @@ -303,7 +303,8 @@ public: // // constructor // - CV_FeatureDetectorMatcherBaseTest(testparam* _tp, double _accuracy_margin, cv::Feature2D* _fe, cv::DescriptorMatcher *_flmatcher, string _flmatchername, int norm_type_for_bfmatcher) : + CV_FeatureDetectorMatcherBaseTest(testparam* _tp, double _accuracy_margin, cv::Feature2D* _fe, + cv::DescriptorMatcher *_flmatcher, string _flmatchername, int norm_type_for_bfmatcher) : tp(_tp), target_accuracy_margin_from_bfmatcher(_accuracy_margin), fe(_fe), @@ -318,6 +319,15 @@ public: bfmatcher = new cv::BFMatcher(norm_type_for_bfmatcher); } + virtual ~CV_FeatureDetectorMatcherBaseTest() + { + if (bfmatcher) + { + delete bfmatcher; + bfmatcher = NULL; + } + } + // // Main Test method // diff --git a/modules/features2d/test/test_nearestneighbors.cpp b/modules/features2d/test/test_nearestneighbors.cpp index b63bc6433e..bb1d51bf60 100644 --- a/modules/features2d/test/test_nearestneighbors.cpp +++ b/modules/features2d/test/test_nearestneighbors.cpp @@ -159,7 +159,7 @@ void NearestNeighborTest::run( int /*start_from*/ ) { class CV_KDTreeTest_CPP : public NearestNeighborTest { public: - CV_KDTreeTest_CPP() {} + CV_KDTreeTest_CPP() : NearestNeighborTest(), tr(NULL) {} protected: virtual void createModel( const Mat& data ); virtual int checkGetPoints( const Mat& data ); @@ -244,7 +244,7 @@ void CV_KDTreeTest_CPP::releaseModel() class CV_FlannTest : public NearestNeighborTest { public: - CV_FlannTest() {} + CV_FlannTest() : NearestNeighborTest(), index(NULL) { } protected: void createIndex( const Mat& data, const IndexParams& params ); int knnSearch( Mat& points, Mat& neighbors ); @@ -255,6 +255,9 @@ protected: void CV_FlannTest::createIndex( const Mat& data, const IndexParams& params ) { + // release previously allocated index + releaseModel(); + index = new Index( data, params ); } @@ -321,7 +324,11 @@ int CV_FlannTest::radiusSearch( Mat& points, Mat& neighbors ) void CV_FlannTest::releaseModel() { - delete index; + if (index) + { + delete index; + index = NULL; + } } //---------------------------------------