2016-10-22 3 views
-1

動的行列を割り当てるCで関数を作成します。その考え方は、要素が配列へのポインタである配列を割り当てることです。私が関数でそれをしたいのであれば、正しいコードは何ですか?動的行列を割り当てる関数を作成します。

この

f(***matrix) 

またはこの

f(**matrix)? 

私は最初のものを言うだろうが、私はよく分かりません。ありがとうございました!

+0

どちらも有効な関数のプロトタイプではないような何かをしたい、とどちらもこのような割り当てのために有用*関数呼び出し式*があります。 – EOF

答えて

2

はおそらく

double ** 
allocate_array(size_t rows, size_t cols) 
{ 
    double **array = malloc(cols * sizeof(*array)); 
    if (array == NULL) return NULL; 
    for (size_t i = 0; i < cols; i++) { 
     array[i] = malloc(rows * sizeof(*array[i])); 
     for (size_t j = 0; j < rows; j++) array[i] = 0.0; 
     if (array[i] == NULL) { 
      while (i != 0) free(array[--i]); 
      free(array); 
      return NULL; 
     } 
    } 
    return array; 
} 
+0

'sizeof(** array)の代わりに一貫性を保つために' sizeof(* array [i]) '(または' sizeof'は演算子:sizeof * array [i] ')と書くでしょう。いずれにしても、内部クリーンアップループのためではなく、少なくとも1つ、...-) – alk

+1

これは*素晴らしい*ですが、 'calloc()'は誤解を招きます。浮動小数点ゼロがビット単位でゼロになる必要はありません( 'NULL'はビット単位でゼロである必要はありません)。 'calloc()'によって行われた初期化は役に立たない。 – EOF

+0

@alk、EOF:良い点。編集されました。 – kdmurrray91

関連する問題