2010-11-25 16 views
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); 

どのようにして行列に割り当てられたメモリの割り当てを解除しますか?C++およびGNU科学ライブラリコードのメモリリークを除去する

+3

割り当てを解除するメモリはどこで割り当てられましたか。コードスニペットには割り当てが表示されません。 –

+1

GSLが行列計算にメモリを割り当てる場合、必要がなくなったときにメモリを解放します。 –

答えて

2

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

gsl_matrix_view_array()について質問した場合、戻り値は元の行列のビューへのポインタであり、余分な行列が割り当てられていないことを示しています。同じ行列へのポインタのみを取得します。したがって、malloc()/newを使用して元の行列を割り当てる場合を除き、何もしないでください。元の行列にはmalloc()/new[]を使用する場合(あなたの場合ではありませんが、とにかく)、ビューではなくオリジナルの行列にfree()/delete[]を呼び出します。

+0

Erm、 'new'、Shirley? (これは 'C++'タグを持っています) – sbi

+0

@sbi:コードを見て、ライブラリにCインタフェースがあると思ったので、C++は考えていませんでした。一定。 – sharptooth

+0

ええ、質問にはおそらく 'C++ 'の代わりに' c'タグがあるはずです。しかし、それは 'C++'タグを持っているので... – sbi

関連する問題