人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


●質問者: lionfan
●カテゴリ:コンピュータ
✍キーワード:C++ C言語 EXPRESS void Win32
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● くまっぷす
●60ポイント ベストアンサー

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

#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の値を入れる場所を確保してくれるんで、大丈夫ですが。

◎質問者からの返答

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

int *a;

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


2 ● しおり
●10ポイント

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ