関数の呼び出し?

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

関数の呼び出し?

#1

投稿記事 by タマ » 14年前

windows visual studio 2008です。
配列d[]、fix[]を初期化して、各10個ずつprintfで表示しようとすると、
デバッグする時に停止してしまいます。どこに不具合を起こす箇所があるんでしょうか?

コード:

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

#define MAXLENGTH 10

int *d, *fix;

void init_array(void){
/*配列d[]、fix[]の初期化*/
	for(int start=0;start<MAXLENGTH;start++){
		d[start]=0;
		fix[start]=0;
	}
}

int main(void){
             int i;
			 init_array();
             for(i=0;i<MAXLENGTH;i++){
                          printf("d[%d]=%d\n",i,d[i]);
                          printf("fix[%d]=%d\n",i,fix[i]);
			 }
	 return 0;
}

たかぎ
記事: 328
登録日時: 15年前
住所: 大阪
連絡を取る:

Re: 関数の呼び出し?

#2

投稿記事 by たかぎ » 14年前

ポインタdとfixが未初期化です。

タマ

Re: 関数の呼び出し?

#3

投稿記事 by タマ » 14年前

init_arrayに配列の初期化の役割を持たせる場合は、
d[start]=0;
fix[start]=0;
の0を変えた方がいいですか?

たかぎ
記事: 328
登録日時: 15年前
住所: 大阪
連絡を取る:

Re: 関数の呼び出し?

#4

投稿記事 by たかぎ » 14年前

タマ さんが書きました:init_arrayに配列の初期化の役割を持たせる場合は、
d[start]=0;
fix[start]=0;
の0を変えた方がいいですか?
そうではなくて、dもfixも、どのオブジェクトも参照していませんね。

例えていうなら、「5ページ目を読んでください」といっているけれども、一体どの本の5ページ目なのかを指示していないのと同じことです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 関数の呼び出し?

#5

投稿記事 by softya(ソフト屋) » 14年前

たかぎ さんが書きました:
タマ さんが書きました:init_arrayに配列の初期化の役割を持たせる場合は、
d[start]=0;
fix[start]=0;
の0を変えた方がいいですか?
そうではなくて、dもfixも、どのオブジェクトも参照していませんね。

例えていうなら、「5ページ目を読んでください」といっているけれども、一体どの本の5ページ目なのかを指示していないのと同じことです。
補足して書くと、int *d, *fix;の2つのポインタは何処の実体も指していないので、例えるならクラスメイトに「この本の0ページから10ページを読んでって言われたので、手を見たら手には本を持っていない」と言う電波的な状況なんです。そう言われてもあなたはどの本を見て良いのか分かりませんよね?それは、CPUも同じです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

タマ

Re: 関数の呼び出し?

#6

投稿記事 by タマ » 14年前

int *d,*fix;
の部分を
int d[MAXLENGTH],fix[MAXLENGTH];
にしたら正常に実行されるようになりました。
数を決めておくことで実体が現れたって事ですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 関数の呼び出し?

#7

投稿記事 by softya(ソフト屋) » 14年前

int *d,*fix;はポインタで実体=物=オブジェクト=本ではありません。
int d[MAXLENGTH],fix[MAXLENGTH];は配列で実体=物=オブジェクト=本です。
厳密に言えば上のdと下のdは厳密には同じものではありませんが、ポインタには実体が別に必要だと理解してもらえば良いです。

コード:

int d_hontai[MAXLENGTH],fix_hontai[MAXLENGTH];
int *d = d_hontai,*fix = fix_hontai;
と書けばdとfixは実体を指しますので問題なく使えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

タマ

Re: 関数の呼び出し?

#8

投稿記事 by タマ » 14年前

丁寧にありがとうございます。また一つ賢くなれました。

閉鎖

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