代码之家  ›  专栏  ›  技术社区  ›  Gabriele

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

  •  1
  • Gabriele  · 技术社区  · 6 年前

    我正在使用C语言的Gnu科学图书馆 official documentation :

    void gsl_matrix_free(gsl_matrix * m)
    

    此函数释放先前分配的矩阵m。如果矩阵 使用gsl\u matrix\u alloc()创建,然后使用矩阵下面的块 也将被解除分配。如果矩阵是从其他矩阵创建的 对象,则内存仍由该对象拥有,并且不会 已解除分配。

    这是什么意思?如果我有

    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?
    

    }

    是否要打电话给 gsl_matrix_free 即使对象已在另一个函数中分配,是否确实释放了内存?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Antti Haapala -- Слава Україні    6 年前

    是的,在您的代码中,它是这样工作的。因为你分配了 gsl_matrix_alloc ,则, 你是 释放它 gsl_matrix_free .这与 malloc free

    引用摘录的最后一句话是指 获取指向 gsl_matrix 但它指向一个共享的内存或另一个对象拥有的部分内存,该内存不会被释放 gsl\u matrix\u free ,但你要打电话 gsl\u matrix\u free 但当您停止使用指针时,它仍会显示在指针上。