[mlpack-svn] [MLPACK] #310: memory leak in NeighborSearch

MLPACK Trac trac at coffeetalk-1.cc.gatech.edu
Mon Nov 18 02:09:56 EST 2013


#310: memory leak in NeighborSearch
------------------------+---------------------------------------------------
  Reporter:  bianjiang  |        Owner:     
      Type:  defect     |       Status:  new
  Priority:  major      |    Milestone:     
 Component:  mlpack     |   Resolution:     
  Keywords:             |     Blocking:     
Blocked By:             |  
------------------------+---------------------------------------------------

Comment (by bianjiang):

 Apparently, if you pass in a referenceTree, rather than just use the
 constructor, it doesn't leak... The following code if fine.

 {{{
                 AllkNN* allknn = NULL;

                 std::vector<size_t> oldFromNewRefs;


                 BinarySpaceTree<bound::HRectBound<2>,
                 NeighborSearchStat<NearestNeighborSort> >
                 refTree(data, oldFromNewRefs, leafSize);

                 allknn = new AllkNN(&refTree, data, false);

 }}}

 Trees created from the following constructor not being deleted?
 {{{
 // Construct the object.
 template<typename SortPolicy, typename MetricType, typename TreeType>
 NeighborSearch<SortPolicy, MetricType, TreeType>::
 NeighborSearch(const typename TreeType::Mat& referenceSet,
                const typename TreeType::Mat& querySet,
                const bool naive,
                const bool singleMode,
                const size_t leafSize,
                const MetricType metric) :
     referenceCopy(referenceSet),
     queryCopy(querySet),
     referenceSet(referenceCopy),
     querySet(queryCopy),
     referenceTree(NULL),
     queryTree(NULL),
     treeOwner(true), // False if a tree was passed.
     hasQuerySet(true),
     naive(naive),
     singleMode(!naive && singleMode), // No single mode if naive.
     metric(metric),
     numberOfPrunes(0)
 {
   // C++11 will allow us to call out to other constructors so we can avoid
 this
   // copypasta problem.

   // We'll time tree building, but only if we are building trees.
   Timer::Start("tree_building");

   // Construct as a naive object if we need to.
   referenceTree = new TreeType(referenceCopy, oldFromNewReferences,
       (naive ? referenceCopy.n_cols : leafSize));

   if (!singleMode)
     queryTree = new TreeType(queryCopy, oldFromNewQueries,
         (naive ? querySet.n_cols : leafSize));

   // Stop the timer we started above (if we need to).
   Timer::Stop("tree_building");
 }
 }}}

-- 
Ticket URL: <http://trac.research.cc.gatech.edu/fastlab/ticket/310#comment:2>
MLPACK <www.fast-lab.org>
MLPACK is an intuitive, fast, and scalable C++ machine learning library developed at Georgia Tech.


More information about the mlpack-svn mailing list