ページ 11

動的な2次元配列

Posted: 2013年3月05日(火) 04:48
by めた

コード:

/* ar[0][0]
   ar[1][0] ar[1][0]
   ar[2][0] ar[2][1] ar[2][2]
  配列領域を確保 */

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

#define M 2
#define N 66

int main(void)
{
  int m = 3;
  int i;
  
  int **ar;
  ar=malloc(sizeof(int *)*m);
  for(i=0;i<m;i++){
    ar[i]=malloc(sizeof(int) * (i+1));
    printf("iの値 %d\n",i);
  }
  
  ar[0][0]=10;
  *(*(ar+M)+N)=1;

  printf("二次元配列の出力 > %d \n",ar[0][0]);
  printf("二次元配列の出力 ar[M][N] > %d \n",ar[M][N]);

}

上のコメント分のような配列を作りたいと思っているのですが、期待してないar[2][66](ar[M][3以上])にも値が入ってしまいます。
なぜですか?

Re: 動的な2次元配列

Posted: 2013年3月05日(火) 06:33
by h2so5
めた さんが書きました: 上のコメント分のような配列を作りたいと思っているのですが、期待してないar[2][66](ar[M][3以上])にも値が入ってしまいます。
なぜですか?
配列の範囲外の関係の無いデータが表示されているだけです。

Re: 動的な2次元配列

Posted: 2013年3月05日(火) 07:56
by box
動的に確保したかどうかとは関係なく、
配列の定義範囲外の領域に書き込んだり
そこを読み込んだりするコードを書くことは普通にできます。
ただし、そのコードを実行した結果、何が起こるかは知りませんよ、ということです。