我正在使用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
(即使我在{{{ 1}}功能)。但是如何在返回之前释放一些东西呢?我是指针新手"我可以在这里使用一些建议或澄清。谢谢。
答案 0 :(得分:0)
我知道我在程序的某个地方泄漏了记忆,我怀疑......
......停在那儿。永远不要试图怀疑这样的事情。你经常是错的。使用内存调试器来确定它正在泄漏哪个分配,遵循分配的对象(及其指向)的传递方式,以及最后一个指针被“删除”的时刻添加空闲。
内存调试的首要任务是Valgrind。使用它。
但是如何在返回之前释放一些东西?
你没有。
alloc / free不是必须在每个功能范围级别上平衡的东西。规则是,所有获得分配的东西必须最终免费,但是当这种情况发生时,由你决定。