2次元配列の動的確保

C言語で2次元配列を動的に割り当てる4つの方法 - FLYING

callocでいいのでは?と思ったんだけどよく考えたらcallocでもmallocでも書き方が違うだけで結局同じだよね、確か。(callocだと0クリアが入るという違いはあるものの)

で、2次元配列なんですが、色々やり方があって面白いですね。

でも2次元配列が必要になるケースでは事前にデータの数が分かってないことが多いので結局のところ、要素一つずつ確保するのがいいのかなぁという気もします。つまり一番目の処理ですね。

とりあえず10個の要素を確保して実際には5個までしか使わなかったとかあると思うので先を見越してメモリ確保しても使わないということも考えられますし。


でまあこれだけだったらアレなので初心者ながら僕も2次元配列の確保処理を考えてみました。

と、いっても元記事の2番目のやり方を少し変形させただけですけど。

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

int main (void) {
    int **matrix;
    int i, j, n, m;
    n = 100, m = 100;
    
    matrix = malloc(sizeof(int *) * n);
    matrix[0] = malloc(sizeof(int) * n * m);
    for (i=1;i<n;i++) {
        matrix[i] = matrix[0] + i * m;
    }
    
    for (i=0;i<n;i++) {
        for (j=0;j<m;j++) {
            matrix[i][j] = i * m + j;
            printf("%d\n", matrix[i][j]);
        }
    }
    
    free(matrix[0]);
    free(matrix);
    return 0;
}

base_matrixを使わずにmartix[0]にメモリを確保してるだけですね。変数一個減るだけでそれ以外違いはありません。