素朴な疑問です

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

素朴な疑問です

#1

投稿記事 by 虎ichi » 14年前

はじめまして!
とある参考書にのってたおかしなプログラムについての質問です。
簡単な質問だと思いますが、よろしくお願いします。

コード:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{

  int *a, *b;
  int i;

  a = (int*) calloc(100, sizeof(int));
  b = (int*) calloc(100, sizeof(int));

  for(i = 0; i < 300; i++)
    {
      a[i] = i;
    }
  for(i = 0; i < 100; i++)
    {
      printf("b[%d] = %d\n", i, b[i]);
    }
}
上記のプログラムを実行すると、何も初期化とかしていないのに配列bに
b[0] = 102
b[1] = 103
b[2] = 104



b[98] = 200
b[99] = 201
のように値が入っているのはなぜなのでしょうか?
free関数で開放してないからだけでしょうか?

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: 素朴な疑問です

#2

投稿記事 by bitter_fox » 14年前

虎ichi さんが書きました:

コード:

  a = (int*) calloc(100, sizeof(int));
  b = (int*) calloc(100, sizeof(int));

  for(i = 0; i < 300; i++)
    {
      a[i] = i;
    }
上記のプログラムを実行すると、何も初期化とかしていないのに配列bに
b[0] = 102
b[1] = 103
b[2] = 104



b[98] = 200
b[99] = 201
のように値が入っているのはなぜなのでしょうか?
簡単に言うと一つ目のforでaの範囲を超えbの範囲まで代入しているせいです。

イメージで言うと次のような感じです。
1.png
1.png (4.27 KiB) 閲覧数: 1610 回

non
記事: 1097
登録日時: 15年前

Re: 素朴な疑問です

#3

投稿記事 by non » 14年前

危険な(暴走する可能性の高い)プログラムなのでこのようなことは、しないように注意しましょう。
C言語はIndexの範囲をチェックしてくれませんからね。
non

虎ichi

Re: 素朴な疑問です

#4

投稿記事 by 虎ichi » 14年前

解決しました!ありがとうございます。

閉鎖

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