1
xgboostをC_APIで使用していますが、コード内でメモリリークの原因を見つけようとしています。 は、私は次のコードを持っている:xgboostで関数に割り当てられたメモリを解放する方法
//関数定義/ c_api.cc
XGB_DLL int XGBoosterPredict(BoosterHandle handle,
DMatrixHandle dmat,
int option_mask,
unsigned ntree_limit,
xgboost::bst_ulong *len,
const bst_float **out_result)
{
std::vector<bst_float>& preds = XGBAPIThreadLocalStore::Get()-
>ret_vec_float;
API_BEGIN();
Booster *bst = static_cast<Booster*>(handle);
bst->LazyInit();
bst->learner()->Predict(
static_cast<std::shared_ptr<DMatrix>*>(dmat)->get(),
(option_mask & 1) != 0,
&preds, ntree_limit,
(option_mask & 2) != 0,
(option_mask & 4) != 0);
*out_result = dmlc::BeginPtr(preds);
*len = static_cast<xgboost::bst_ulong>(preds.size());
API_END();
}
// XGBoosterPredict // h_boosterを呼び出している主な機能には、h_testは
正しく定義されていますconst float *f;
XGBoosterPredict(h_booster, h_test, 0, 0, &out_len, &f);
//
インサイドXGBoosterPredictポインタに割り当てられている次
std::vector<bst_float>& preds = XGBAPIThreadLocalStore::Get()->ret_vec_float;
*out_result = dmlc::BeginPtr(preds);
質問:fに割り当てるメモリを解放する正しい方法は何ですか?