fixed memory leak in GBTrees
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Tue, 1 Sep 2015 08:40:23 +0000 (11:40 +0300)
committerDikay900 <dark900@xyz.de>
Sun, 13 Sep 2015 10:15:30 +0000 (12:15 +0200)
modules/ml/src/gbt.cpp

index 0ebe19e..e41d6c2 100644 (file)
@@ -1274,13 +1274,18 @@ CvGBTrees::calc_error( CvMLData* _data, int type, std::vector<float> *resp )
         return -FLT_MAX;
 
     float* pred_resp = 0;
+    bool needsFreeing = false;
+
     if (resp)
     {
         resp->resize(n);
         pred_resp = &((*resp)[0]);
     }
     else
+    {
         pred_resp = new float[n];
+        needsFreeing = true;
+    }
 
     Sample_predictor predictor = Sample_predictor(this, pred_resp, _data->get_values(),
             _data->get_missing(), _sample_idx);
@@ -1313,6 +1318,9 @@ CvGBTrees::calc_error( CvMLData* _data, int type, std::vector<float> *resp )
         err = err / (float)n;
     }
 
+    if (needsFreeing)
+        delete[]pred_resp;
+
     return err;
 }