3
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);

マトリックスに割り当てられたメモリの割り当てを解除するにはどうすればよいですか?

4

1 に答える 1

2

コンパイラはこれらの行列を処理します。malloc()/new[]または、割り当てられたメモリを使用して所有権を付与する関数を使用しない限りmalloc()/new[]、メモリがリークする可能性はありません。

gsl_matrix_view_array()について質問した場合、ドキュメントには、戻り値は元の行列のビューへのポインターであると記載されています。つまり、追加の行列は割り当てられません。同じ行列へのポインターのみを取得します。したがってmalloc()/new、元のマトリックスを割り当てるために使用した場合を除いて、何もするべきではありません。元のマトリックスに使用するmalloc()/new[]場合(あなたの場合ではありませんが、とにかく)-free()/delete[]ビューではなく、元のマトリックスを呼び出します。

于 2010-11-25T11:08:32.190 に答える