【发布时间】:2021-12-25 21:00:54
【问题描述】:
我收到了这个错误
*** 检测到堆栈粉碎 ***: 已终止 堕胎 (núcleo despejado) ***检测到堆栈粉碎***:终止 Abortado (núcleo despejado)
当我从第 8 行示例中选择一个值时,例如 8A 或 8C。 但是功能 play 仍然需要,但是在打印板时,它不会像应有的那样打印第 8 行。
#include <stdio.h>
#include <string.h>
//void init_board(char board[8][8]){
// for(int i=0;i<8;i++){
// board[i][j]='.';
// }
// }
// board[3][3]='o';
// board[4][4]='o';
// board[3][4]='x';
// board[4][3]='x';
//}
void init_board(char board[8][8]){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
board[i][j]='.';
}
}
board[3][3]='o';
board[4][4]='o';
board[3][4]='x';
board[4][3]='x';
board[5][2]='x';
board[5][3]='o';
board[6][1]='x';
board[3][0]='o';
board[3][1]='o';
board[4][1]='x';
board[2][5]='o';
board[2][4]='x';
}
void print_board(char board[8][8]){
printf(" A B C D E F G H");
for(int i=0;i<8;i++){
printf("\n");
printf("%d ",i+1);
for(int j=0;j<8;j++){
printf("%c ",board[i][j]);
}
}
}
int count_flips_dir(char board[8][8],int line, char col,int delta_line,int delta_col,char color){
int i;
if(board[line+delta_line][col+delta_col]=='.'){
return 0;
}
for(i=0;board[line+delta_line][col+delta_col]!=color;i++){
line=line+delta_line;
col=col+delta_col;
if(board[line+delta_line][col+delta_col]=='.'){
return 0;
}
}
return i;
}
int flanked(char board[8][8],int line,char col,char color ){
int NN = count_flips_dir(board,line,col,-1,0,color);
int ND = count_flips_dir(board,line,col,-1,1,color);
int NE = count_flips_dir(board,line,col,-1,-1,color);
int SS = count_flips_dir(board,line,col,1,0,color);
int SD = count_flips_dir(board,line,col,1,1,color);
int SE = count_flips_dir(board,line,col,1,-1,color);
int D = count_flips_dir(board,line,col,0,1,color);
int E = count_flips_dir(board,line,col,0,-1,color);
return NN+NE+ND+SD+SE+SS+E+D;
}
void changeboard(char board[8][8],int line, char col,int delta_line,int delta_col,char color){
int i;
for(i=0;board[line+delta_line][col+delta_col]!=color;i++){
board[delta_line+line][delta_col+col]=color;
line=line+delta_line;
col=col+delta_col;
}
}
void change(char board[8][8],int line,char col,char color){
if (count_flips_dir(board,line,col,-1,0,color)>0){
changeboard(board,line,col,-1,0,color);
}
if (count_flips_dir(board,line,col,-1,1,color)>0){
changeboard(board,line,col,-1,1,color);
}
if (count_flips_dir(board,line,col,-1,-1,color)>0){
changeboard(board,line,col,-1,-1,color);
}
if (count_flips_dir(board,line,col,1,0,color)>0){
changeboard(board,line,col,1,0,color);
}
if (count_flips_dir(board,line,col,1,-1,color)>0){
changeboard(board,line,col,1,-1,color);
}
if (count_flips_dir(board,line,col,1,1,color)>0){
changeboard(board,line,col,1,1,color);
}
if (count_flips_dir(board,line,col,0,1,color)>0){
changeboard(board,line,col,0,1,color);
}
if (count_flips_dir(board,line,col,0,-1,color)>0){
changeboard(board,line,col,0,-1,color);
}
}
void play(char board[8][8],int line,char col,char color){
board[line][col]=color;
change(board,line,col,color);
print_board(board);
}
int main(){
int l;
char c;
char board[8][8];
init_board(board);
print_board(board);
printf("\nEscolha a sua Jogada: ");
scanf("%d %c", &l, &c);
c=c-'A';
l=l-1;
//teste função count_flips_dir
//printf("%d",count_flips_dir(board,l,c,1,1,'o'));
//teste funçao flanked
//printf("\n%d",flanked(board,l,c,'o'));
if (board[l][c]=='.'){
if(flanked(board,l,c,'o')>0){
play(board,l,c,'o');
}
}
return 0;
}
【问题讨论】:
-
这意味着您有内存溢出或其他一些内存损坏错误。使用基本的调试技术来尝试找到它。删除所有代码并一次添加一点以尝试缩小问题所在。使用valgrind 之类的工具来帮助您找到问题。
-
scanf 工作得很好,我在出现问题之前对其进行了测试,当从第 8 行中选择一个值并将其传递给函数播放时,它只是打印少一行的板子