ページ 11

コンパイルには通るがエラーで落ちる

Posted: 2016年2月08日(月) 22:12
by HB
C言語でHIT&BLOWを作ろうとしています。
現時点でコンパイルには通るのですが、実行するとエラーで落ちてしまいます。
助言の程をよろしくお願いします。

コード:

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

void syokika(int *q, int *w, int *e, int *r)
{
	int i, j, c;//配列のシャッフルに使用
	int ransu[9];//0~9の数字を格納

	/* 配列に0~9の数字を入れる */
	for (i = 0; i < 10; i++) {
		ransu[i] = i;
	}

	/* 乱数のシード値 */
	srand((unsigned)time(NULL));

	/* 乱数を使い配列をシャッフル */
	for (i = 0; i < 10; i++) {
		j = rand() % 10;
		c = ransu[i];
		ransu[i] = ransu[j];
		ransu[j] = c;
	}

	/* メイン関数に今回使用する4つの数字を渡す */
	*q = ransu[0];
	*w = ransu[1];
	*e = ransu[2];
	*r = ransu[3];
	
	/*////// チェック用 /////////
	printf("%d\n", ransu[0]);
	printf("%d\n", ransu[1]);
	printf("%d\n", ransu[2]);
	printf("%d\n", ransu[3]);
	printf("%d\n", ransu[4]);
	printf("%d\n", ransu[5]);
	printf("%d\n", ransu[6]);
	printf("%d\n", ransu[7]);
	printf("%d\n", ransu[8]);
	printf("%d\n", ransu[9]);
	///////////////////////////*/
}

int main(void)
{
	int kotae_1, kotae_2, kotae_3, kotae_4;
	syokika(&kotae_1,&kotae_2,&kotae_3,&kotae_4);
	printf("%d%d%d%d\n", kotae_1, kotae_2, kotae_3 kotae_4);
	return 0;
}
 

Re: コンパイルには通るがエラーで落ちる

Posted: 2016年2月08日(月) 22:30
by みけCAT
21行目などでアクセスされるransu[9]は確保された領域の範囲外なので、アクセス(読み書き)してはいけません。
配列の要素数を増やしてください。

Re: コンパイルには通るがエラーで落ちる

Posted: 2016年2月08日(月) 22:32
by みけCAT
50行目で、kotae_3とkotae_4の間にコンマが抜けているのもまずいですね。
オフトピック
なんでこれコンパイル通るんだよ…どんなコンパイラを使っているんだ…?

Re: コンパイルには通るがエラーで落ちる

Posted: 2016年2月08日(月) 23:33
by HB
コンマが抜けて通ってるように見えるのは、どうにか直そうとした時に間違って消してしまったた物をコピペしたためだと思われます。
申し訳ありません。
言われた通り直してみたところうまくいくようになりました。
ありがとうございます。