Я использую библиотеку GNU GSL для некоторой интерполяции.
double Interpolator::calculateInterpolant(const InterpTypes& TYPE)
{
double interpolant;
const int SIZE = predictor_.size();
gsl_interp * interp = allocateInterpolationObject(TYPE, SIZE);
gsl_interp_init(interp, &predictor_[0], &response_[0], SIZE);
gsl_interp_accel * acc = gsl_interp_accel_alloc();
interpolant = gsl_interp_eval(interp, &predictor_[0], &response_[0],
level_, acc);
gsl_interp_free(interp);
gsl_interp_accel_free(acc);
return interpolant;
}
Меня интересует функция allocateInterpolationObject
. Вот тело этой функции:
gsl_interp * allocateInterpolationObject(const InterpTypes& TYPE,
const int& SIZE)
{
gsl_interp * interp;
switch (TYPE){
case LINEAR:
interp = gsl_interp_alloc(gsl_interp_linear, SIZE);
break;
case CSPLINE:
interp = gsl_interp_alloc(gsl_interp_cspline, SIZE);
break;
case AKIMA:
interp = gsl_interp_alloc(gsl_interp_akima, SIZE);
break;
}
return interp;
}
Я знаю, что где-то в моей программе происходит утечка памяти, и я подозреваю, что это может быть здесь, потому что я не освобождаю объект interp
внутри функции allocateInterpolationObject
(хотя я освобождаю его в функции calculateInterpolant
). Но как я могу освободить что-то, прежде чем вернуть его? Я «новичок в указателях», и мне не помешали бы некоторые советы или разъяснения. Спасибо.