2016-09-25 4 views
-5

大きな2D配列をゼロに初期化したい。 私はcallocでメモリを割り当てると、自動的にすべてのセルをゼロに初期化します。 単一のcalloc関数を使用して2D配列用のメモリを割り当てることは可能ですか? あなたが[]演算子を使って、行列の要素にアクセスできるようにしたい場合は、まず行列の各列に格納されたデータへのポインタが含まれている中間構造を割り当てる必要がありますcallocを使用したメモリ割り当て

+6

はい、あなたの質問は非常に不明です。なぜ質問するのですか?なぜそれはうまくいかなかったのですか? –

+0

これを一度に行うことができるかどうかは、2D配列が何を意味するかによって決まる場合があります。あなたがしようとしていることの例を挙げてください。 – Evert

+0

大きな2D配列をゼロに初期化するにはどうすればよいですか? (配列サイズは10^12です) –

答えて

-3
int nrows = 2000, ncolumns = 190; 

int **a=calloc(nrows * ncolumns, sizeof(a)); 

printf("%d", a[0][0]); 
1

ありがとう。

各行は、calloc()を使用して割り当てられているため、ゼロになります。これはあなたが探しているものですか?

#include <stdlib.h> 
#include <stdio.h> 

int main(void) 
{ 
    int **a; 
    unsigned int num_rows = 2000; 
    unsigned int num_columns = 190; 

    a = calloc(num_rows, sizeof(*a)); 
    if (a == NULL) { 
     /* TODO: Error handling. */ 
     return -1; 
    } 

    for (unsigned int i = 0; i < num_rows; i++) { 
     a[i] = calloc(num_columns, sizeof(**a)); 
     if (a[i] == NULL) { 
      /* TODO: Error handling. */ 
      return -1; 
     } 
    } 

    printf("%d\n", a[0][0]); 

    /* TODO: Free calloc'd memory. */  

    return 0; 
} 
関連する問題