アプリ版:「スタンプのみでお礼する」機能のリリースについて

穴掘り方というやり方で迷路を作っています。
とりあえずすこしだけ作ってみて実行したらセグメンテーション違反が起こってしまいました。
解説お願いします。

次のサイトを参考にしています。ttp://www.ced.is.utsunomiya-u.ac.jp/lecture/2009/prog/p3/kadai4/5.html


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define A 51
#define B 51 /*51ラ51マスの迷路*/


void initialize(int *x,int *y,int map[A][B]);  /*最初のステージ作成と座標決定*/
int dig(int *x,int *y,int map[A][B]);   /*道を作る*/


int main(void)
{
int x,y;   /*現在の座標*/

int map[A][B];   

initialize(&x,&y,map);

dig(&x,&y,map);

map[1][0] = 2;
map[A-2][B-1] = 2;

for(y=0;y<B;y++){
for(x=0;x<A;x++){
if( map[x][y] == 0){
printf(" ");
}else if( map[x][y] == 1){
printf("■");
}else if( map[x][y] == 2){
printf("..") ;
}
}
printf("\n");
}


}


void initialize(int *x,int *y,int map[A][B])
{
int i,h;


for(i=0;i<A;i++){
for(h=0;h<B;i++){
map[i][h]=1;
}
}
do{
*x=rand()%A;
*y=rand()%B;
}while(*x!=0 && *x!=A-1 && *y!=0 && *y!=B-1);
}


int dig(int *x,int *y,int map[A][B])
{
int r,c,dx,dy,count=0;

do{

r = rand()%4;

switch(r){     /*道を進める方向を決める*/

case 0:
dx = 0;
dy = -1;
break;

case 1:
dx = -1;
dy = 0;
break;

case 2:
dx = 0;
dy = 1;
break;

case 3:
dx = 1;
dy = 0;
break;   

}

if(*x+dx*2 <= 0 || *y+dy*2 <= 0 || *x+dx*2 >= A-1 || *y+dy*2 >= B-1 || map[*x+dx*2][*y+dy*2] == 0){

c = 0;
count++;
if(count ==4){     /*4方向とも進めなかったらループを抜ける*/
break;
}

}else if(map[*x+dx*2][*y+dy*2] == 1){

map[*x+dx][*y+dy] = 0;
*x = *x + dx*2;
*y = *y + dy*2;
c =1;
}
}while(c==0);
}

A 回答 (4件)

initialize....

この回答への補足

・・・・え~~と、すいません、わからないです。

補足日時:2012/01/31 14:43
    • good
    • 0

セグメンテーション違反はCのエラーではないので実行するハードウエア、OS等の情報を記しましょう。



まあそこいら中変だけどね。
*等の使い方を理解していないようだね。

この回答への補足

???まちがってるとしたらmapのほうかと思ってました・・
xの中身に&xが入るから、*x は *&x になるのでは?やっぱりわからないです。


>セグメンテーション違反はCのエラーではないので実行するハードウエア、OS等の情報を記しましょう。

使っているPC:Macbook Air, OS:Windows7 SP1(BootCamp) ・cygwin  実行結果:Segmentation fault (コアダンプ)

です。

補足日時:2012/01/31 16:14
    • good
    • 0

initialize の中をじっと見てみろってこった.

    • good
    • 0

> for(h=0;h<B;i++){



ぱっと見不自然な気はするよね。無限ループしてるだろうし
    • good
    • 0
この回答へのお礼

ありがとうございました!全然気づけませんでした、同じミスはしないよう注意します‥。

お礼日時:2012/01/31 19:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!