fixed memory leak in flann index
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Tue, 1 Sep 2015 13:17:18 +0000 (16:17 +0300)
committerAlexander Smorkalov <alexander.smorkalov@itseez.com>
Thu, 17 Sep 2015 10:41:16 +0000 (13:41 +0300)
(cherry picked from commit 32d7c1950a562d038ff6f8b810ee46298a83fc39)

modules/flann/src/miniflann.cpp

index 5ce3e90..9bf5033 100644 (file)
@@ -318,12 +318,14 @@ buildIndex_(void*& index, const Mat& wholedata, const Mat& data, const IndexPara
 
     ::cvflann::Matrix<ElementType> dataset((ElementType*)data.data, data.rows, data.cols);
 
-    IndexType* _index = NULL;
-    if( !index || getParam<flann_algorithm_t>(params, "algorithm", FLANN_INDEX_LINEAR) != FLANN_INDEX_LSH) // currently, additional index support is the lsh algorithm only.
+    // currently, additional index support is the lsh algorithm only.
+    if( !index || getParam<flann_algorithm_t>(params, "algorithm", FLANN_INDEX_LINEAR) != FLANN_INDEX_LSH)
     {
-        _index = new IndexType(dataset, get_params(params), dist);
+        Ptr<IndexType> _index = makePtr<IndexType>(dataset, get_params(params), dist);
         _index->buildIndex();
         index = _index;
+        // HACK to prevent object destruction
+        _index.obj = NULL;
     }
     else // build additional lsh index
     {