2016-11-16 14 views
0

CでGSLライブラリを使用しようとしていますが、問題が発生しています。その後、私はA初期化しています条件付きジャンプまたは移動が初期化されていない値に依存する - gsl_matrix_setを使用する

A = gsl_matrix_alloc(nr, nc); /* Data matrix */ 
tau = gsl_vector_alloc(nc);  /* required place holder for GSL */ 

私は自分の行列やベクトルのためのスペースを割り当てるい

for(i = 0; i < nr; i++){ 
    gsl_matrix_set(A, i, 0, 1.0); 
} 

for(i = 1; i < nr; i++){ 
    for(j = 0; j < nc; j++){ 
    gsl_matrix_set(A, i, j, 1.0/(double)(i + j + 1)); 
    } 
} 
私は、この行にerroringい

:で

gsl_linalg_QR_decomp(A, tau); 

次のエラー:

==901== Conditional jump or move depends on uninitialised value(s) 
==901== at 0x3E8920AE0E: cblas_dnrm2 (in /usr/lib64/libgslcblas.so.0.0.0) 
==901== by 0x3E88EA779A: gsl_linalg_householder_transform (in /usr/lib64/libgsl.so.0.14.0) 
==901== by 0x3E88EA1305: gsl_linalg_QR_decomp (in /usr/lib64/libgsl.so.0.14.0) 
==901== by 0x400FF3: GE_FindPoint (hw8.c:145) 
==901== by 0x400DF4: main (hw8.c:66) 
==901== Uninitialised value was created by a heap allocation 
==901== at 0x4A06A2E: malloc (vg_replace_malloc.c:270) 
==901== by 0x3E88E4CFD4: gsl_block_alloc (in /usr/lib64/libgsl.so.0.14.0) 
==901== by 0x3E88EB1768: gsl_matrix_alloc (in /usr/lib64/libgsl.so.0.14.0) 
==901== by 0x400EBB: GE_FindPoint (hw8.c:110) 
==901== by 0x400DF4: main (hw8.c:66) 

ラインAを割り当てるライン110点:A = gsl_matrix_alloc(nr, nc);この場合

nc = 3nr = 3840。このエラーの原因は何ですか?

+0

に初期設定の一部を変更します。 1 <= i

+0

それはエラーを取り除くようです! –

+0

そうなら、それを回答として投稿すべきですか? –

答えて

0

初期化の2番目の部分では、開始値がijで一致しません。だから、gsl_matrix_set(A, i, 0, ...)を1回2回呼び出すと、< = i < nrとなり、gsl_matrix_set(A, 0, j, ...)は1になりません。< = j < ncです。

ちょうど私がGSLを知らないが、初期化は私には奇妙に見える

​​
関連する問題