释放GSL矩阵的正确方法是什么?

时间:2018-05-18 13:49:54

标签: c memory memory-leaks free gsl

我正在使用C中的Gnu科学图书馆。来自official documentation

IDEA
     

此函数释放先前分配的矩阵m。如果矩阵是   使用gsl_matrix_alloc()创建然后是矩阵下面的块   也将被解除分配。如果矩阵是从另一个创建的   对象然后内存仍然由该对象拥有,而不是   解除分配。

这是什么意思?假设我有

void gsl_matrix_free(gsl_matrix * m)

并在主要功能

gsl_matrix * get_me_a_matrix(void){
    gls_matrix * out =  gsl_matrix_alloc(10, 10); //here is the allocation
    //assign some values here
    return out;
}

}

int main(){ gsl_matrix * my_matrix = get_me_a_matrix(); //play around with my matrix here gsl_matrix_free(my_matrix); //is the memory free now? 的调用是否真的释放了内存,即使该对象已在另一个函数中分配了?

1 个答案:

答案 0 :(得分:1)

是的,在您的代码中它会像那样工作。由于您使用gsl_matrix_alloc分配了它,因此 gsl_matrix_free释放它。这与mallocfree没有什么不同。

引用摘录中的最后一句是指获取指向gsl_matrix的指针,但它指向共享的内存或另一个对象拥有的内存的一部分,内存不会被gsl_matrix_free释放,但是当您停止使用时,您仍然会在指针上调用gsl_matrix_free