C言語の課題でわからないエラー
Posted: 2015年2月07日(土) 01:27
課題でオセロゲームをつくるんですが、とりあえず人対人をつくってみようと思い、以下のプログラムを書いたのですがどうしてもreverce(オセロの駒を反転させる)の関数のところでセグメントエラーが起きてしまいます。gdbと言う物を使ってどこがおかしいか調べてみたのですがどうやらreverceの引数であるcol,row(ボードの縦と横)の値が全く違う値になってしまいます。どこを直せばよいかわからないので教えてください。長かったので原因と思われる所の周辺を乗せたのですが全部見なければわからない場合はすべて載せます。
typedef struct board_node{
int board[SIZE][SIZE];
}node;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int main(void){
node *board_list;
int move_col[8] = {-1,-1,0,1,1,1,0,-1};
int move_row[8] = {0,1,1,1,0,-1,-1,-1};
board_list = set_board();
print_board(board_list);
board_list = white_turn(board_list,move_col,move_row);
print_board(board_list);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node *white_turn(node *board_list,int move_col[],int move_row[]){
int row,col,move;
fprintf(stdout,"white turn");
do{
fprintf(stdout,"please put position column:");
scanf("%d",&col);
printf("\n");
fprintf(stdout,"please put position row:");
scanf("%d",&row);
if(board_list->board[col-1][row-1]==NO && check_put(board_list,WHITE,col,row,move_col,move_row)==1){
for(move=0; move < 8 ;move++){
printf("%d",move);
board_list = reverce(board_list,col,row,WHITE,move
,move_col,move_row);
}
board_list->board[col-1][row-1]=WHITE;
break;
} if(board_list->board[col-1][row-1]==WHITE ||
board_list->board[col-1][row-1]==BLACK){
fprintf(stdout,"This position already put\n");
}else{
fprintf(stdout,"error");
printf("\n");
}
}while(1);
return(board_list);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node *reverce(node *board_list,int col,int row,int turn,int move
,int move_col[],int move_row[]){
while(1){
col += move_col[move];
row += move_row[move];
if(turn==BLACK){
if(board_list->board[col-1][row-1] == BLACK){
break;
}else if(board_list->board[col-1][row-1] == WHITE){
board_list->board[col-1][row-1] = BLACK;
}
}else if(turn==WHITE){
if(board_list->board[col-1][row-1] == WHITE){
break;
}else if(board_list->board[col-1][row-1] == BLACK){
board_list->board[col-1][row-1] = WHITE;
}
}
}
return(board_list);
}