ページ 11

無効な間接参照の原因がわからない

Posted: 2017年5月12日(金) 06:59
by 大学生
次のプログラムの21行目と24行目で
無効な間接参照(関数) main)
というエラーが出るのですが原因がわかりません

何がダメなのでしょうか?

コード:

#include<stdio.h>
#include<stdlib.h>
#define N 100

int a[N];

void syojun(int i);
int randAB(int A,int B);

int main(void)
{
	int a, b, i;
	
	printf("どの範囲で乱数を生成しますか?\n");
	scanf("%d",&a);
	printf("から");
	scanf("%d",&b);
	
	
	for(i = 0;i < N;i++)
		a[i] = randAB(a,b);
		
	for(i = 0;i < N;i++)
		printf("a[%d] = %d\n",i, a[i]);
	
	printf("これを昇順に並び替えると");
	
	syojun(N);
	
	printf("です。\n");
	
	return 0;
}


int randAB(int A,int B)
{
	int r;
	
	r = rand()%(B - A + 1)+ A;
	
	return r;
}



void syojun(int i)
{
	int j, k;
	for(i = 0;i < N;i++){
		for(j = 1 + i;j < N;j++){
			if(a[i] > a[i + 1]){
				k = a[i];
				a[i] = a[i + 1];
				a[i + 1] = k;
			}
		}
	}
	
	for(i=0;i<N;i++){
		printf("a[%d] = %d\n",i,a[i]);
	}
	
	return;
}

Re: 無効な間接参照の原因がわからない

Posted: 2017年5月12日(金) 07:11
by Iseuma14
実行していないので確実なことは言えませんが、
main関数内で普通のint型として宣言されているaを
添字演算子で参照しようとしているのが問題な気がします

グローバル変数とローカル変数で同じ名前の変数を宣言した時は
ローカル変数の方が優先されるので、aは普通の配列でないintに
なってしまっていると思います。