C言語の初歩的な質問ですみません。


C言語(Visual C++ 2005 Express Edition)の
Win32 コンソールアプリケーションで、
なぜ次のプログラムがエラーになるのかわかりません。
教えていただけないでしょうか。

#include <stdio.h>
void main()
{
int *a;
*a=10;
printf("%d\n",*a);
}

回答の条件
  • 1人1回まで
  • 登録:2007/08/10 22:16:18
  • 終了:2007/08/10 22:32:11

ベストアンサー

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852007/08/10 22:20:40

ポイント60pt

そりゃ、ポインタの値が初期化されてないからですよ。

#include <stdio.h>
void main()
{
  int *a;
  *a=10;
  printf("%d\n",*a);
}

のintのポインタaの値は不定。そして不定なアドレスに値10を書くところで落ちます。

#include <stdio.h>
void main()
{
  int a;
  a=10;
  printf("%d\n",a);
}

ならint a;のところでaの値を入れる場所を確保してくれるんで、大丈夫ですが。

id:lionfan

Kumappus様、ありがとうございました。

int *a;

で、aを自動的に初期化してくれるのかと思っていました・・・。お恥ずかしい。

2007/08/10 22:27:20

その他の回答(1件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852007/08/10 22:20:40ここでベストアンサー

ポイント60pt

そりゃ、ポインタの値が初期化されてないからですよ。

#include <stdio.h>
void main()
{
  int *a;
  *a=10;
  printf("%d\n",*a);
}

のintのポインタaの値は不定。そして不定なアドレスに値10を書くところで落ちます。

#include <stdio.h>
void main()
{
  int a;
  a=10;
  printf("%d\n",a);
}

ならint a;のところでaの値を入れる場所を確保してくれるんで、大丈夫ですが。

id:lionfan

Kumappus様、ありがとうございました。

int *a;

で、aを自動的に初期化してくれるのかと思っていました・・・。お恥ずかしい。

2007/08/10 22:27:20
id:Bookmarker No.2

しおり回答回数191ベストアンサー獲得回数342007/08/10 22:31:48

ポイント10pt

変数 a が、int 値を格納する領域を指していないから。

#include <stdio.h>
int main()
{
    int b;
    int *a = &b;
    *a=10;
    printf("%d\n",*a);
    return 0;
}

# ちなみに、main() の復帰値は、int 型です。

  • id:lionfan
    Bookmarker様、入れ違いで質問を締め切ってしまい申し訳ございませんでした。
  • id:Kumappus
    …というわけで「もうポインタ使うの禁止!」みたいな言語が多くなってきたわけです。
  • id:lionfan
    うう、こんな簡単であろうと思うところでつまづくなんて。超おはずかしいです。
  • id:Kumappus
    Rが使える人にそう謙遜されるとRが使えないこっちがなんか恥ずかしくなってしまいますよ(笑)。
  • id:lionfan
    いえいえKumappus様、Cで挫折したからRに切り替えたのです。つくづくポインタは難しい・・・。orz。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません