動的な2次元配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
めた

動的な2次元配列

#1

投稿記事 by めた » 13年前

コード:

/* 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以上])にも値が入ってしまいます。
なぜですか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 動的な2次元配列

#2

投稿記事 by h2so5 » 13年前

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

box
記事: 2002
登録日時: 15年前

Re: 動的な2次元配列

#3

投稿記事 by box » 13年前

動的に確保したかどうかとは関係なく、
配列の定義範囲外の領域に書き込んだり
そこを読み込んだりするコードを書くことは普通にできます。
ただし、そのコードを実行した結果、何が起こるかは知りませんよ、ということです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る