Shinonome Programming

プログラミングで覚えておきたいものを書き残します.

2次元配列のメモリ領域の動的確保(C言語)

 変数宣言と初期化
int idata[3][2] = {};
と同じことをやろうとしています。

ソースコード


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

int main(int argc, char const *argv[]) {
  int **idata;
  int length,side;
  int i,j;
  length = 3;
  side = 2;
  idata = calloc(length,sizeof(int *));
  for(i = 0;i < length;i++){
    idata[i] = calloc(side,sizeof(int));
  }

  for(i = 0;i < length;i++){
    for(j = 0;j < side;j++){
      printf("idata[%d][%d]:%d\n",i,j,idata[i][j]);
    }
  }

  for(i = 0;i < length;i++){
      free(idata[i]);
  }
  free(idata);
  return 0;
}

実行結果


idata[0][0]:0
idata[0][1]:0
idata[1][0]:0
idata[1][1]:0
idata[2][0]:0
idata[2][1]:0