Как правильно освободить матрицу GSL? - PullRequest
0 голосов
/ 18 мая 2018

Я использую Научную библиотеку Gnu в C. Из официальной документации :

void gsl_matrix_free(gsl_matrix * m)

Эта функция освобождает ранее выделенную матрицу m.Если матрица была создана с использованием gsl_matrix_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 Ответ

0 голосов
/ 18 мая 2018

Да, в вашем коде это будет работать так.Поскольку вы выделили его с gsl_matrix_alloc, , вы освободите его с помощью gsl_matrix_free.Это мало чем отличается от malloc и free.

Последнее предложение в цитируемом отрывке относится к вам , получающему указатель на gsl_matrix, но оно указывает на память, которая являетсяобщая или часть памяти, принадлежащая другому объекту, эта память не будет освобождена gsl_matrix_free, но вы все равно должны вызывать gsl_matrix_free для указателя, когда вы перестанете его использовать.

...