我正在使用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?
的调用是否真的释放了内存,即使该对象已在另一个函数中分配了?
答案 0 :(得分:1)
是的,在您的代码中它会像那样工作。由于您使用gsl_matrix_alloc
分配了它,因此 以gsl_matrix_free
释放它。这与malloc
和free
没有什么不同。
引用摘录中的最后一句是指你获取指向gsl_matrix
的指针,但它指向共享的内存或另一个对象拥有的内存的一部分,内存不会被gsl_matrix_free
释放,但是当您停止使用时,您仍然会在指针上调用gsl_matrix_free
。