穴掘り方というやり方で迷路を作っています。
とりあえずすこしだけ作ってみて実行したらセグメンテーション違反が起こってしまいました。
解説お願いします。
次のサイトを参考にしています。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);
}
No.2
- 回答日時:
セグメンテーション違反はCのエラーではないので実行するハードウエア、OS等の情報を記しましょう。
まあそこいら中変だけどね。
*等の使い方を理解していないようだね。
この回答への補足
???まちがってるとしたらmapのほうかと思ってました・・
xの中身に&xが入るから、*x は *&x になるのでは?やっぱりわからないです。
>セグメンテーション違反はCのエラーではないので実行するハードウエア、OS等の情報を記しましょう。
使っているPC:Macbook Air, OS:Windows7 SP1(BootCamp) ・cygwin 実行結果:Segmentation fault (コアダンプ)
です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 数学 大学数学 1 2022/08/04 17:11
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
比較回数と交換回数表示について
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
std::set<int> で、ある値が何...
-
C言語で三目並べをするプログラ...
-
商と剰余を同時に求める(C言語)
-
if と配列の組み合わせ
-
【C++】関数ポインタの使い方
-
並列プログラミングのπ計算につ...
-
c言語
-
HANDLEて何ですか?
-
read関数をノンブロッキングで...
-
卒業研究でよく分からないとこ...
-
DLLをGetProcAddress()で実行で...
-
GlobalAllocの変数を関数に引き...
-
シグマ公式・・・C言語
-
ファイルから読みこむ方法
-
c言語の問題です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報