устранение утечек памяти в коде научной библиотеки c ++ и GNU - PullRequest
3 голосов
/ 25 ноября 2010
double a[] = { 0.11, 0.12, 0.13,
                  0.21, 0.22, 0.23 };

   double b[] = { 1011, 1012,
                  1021, 1022,
                  1031, 1032 };

   double c[] = { 0.00, 0.00,
                  0.00, 0.00 };

   gsl_matrix_view A = gsl_matrix_view_array(a, 2, 3);
   gsl_matrix_view B = gsl_matrix_view_array(b, 3, 2);
   gsl_matrix_view C = gsl_matrix_view_array(c, 2, 2);

   /* Compute C = A B */

   gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,
                   1.0, &A.matrix, &B.matrix,
                   0.0, &C.matrix);

как освободить память, назначенную для матриц?

1 Ответ

2 голосов
/ 25 ноября 2010

Компилятор позаботится об этих матрицах.Если вы не используете malloc()/new[] или какую-либо функцию, которая использует malloc()/new[] и дает вам право владения выделенной памятью, у вас нет шансов утечки памяти.

Если вы спросили о gsl_matrix_view_array () - в документации сказано, что возвращаемое значение является указателем на представление в исходной матрице, что означает, что дополнительная матрица не выделяется - вы получаете только указатель на ту же матрицу.Поэтому, если вы не использовали malloc()/new для выделения исходной матрицы, вы ничего не должны делать.Если вы используете malloc()/new[] для исходной матрицы (не в вашем случае, но в любом случае) - вызовите free()/delete[] для исходной матрицы, а не для вида.

...