【发布时间】:2021-06-21 13:09:09
【问题描述】:
我正在用 C 语言下棋,但在我的布尔检查中遇到了分段错误(这应该让程序查看是否有玩家在检查中)。我认为这与我的 S 变量有关,但我无法真正理解发生了什么。如果有人能告诉我是什么导致了分段错误,那就太好了。
谢谢! 爱德华
bool check(void){
//printf("ran check\n");
for(int x3 = 0; x3 < 8; x3++)
{
//printf ("here\n");
for(int y3 = 0; y3 < 8; y3++)
{
switch(board[x3][y3])
{
int s = 0;
case 1:
printf("pawn");
usleep(50000);
if (board[x3 - 1][y3 + 1] == 11 || board[x3 + 1][y3 + 1 ] == 11)
{
printf("in check");
return true;
}
case 2:
printf("rooktest");
do{
s = s + 1;
if (board[x3+s][y3] == 11){
printf("Rook in check");
return true;
}
} while (board[x3+s][y3] == 0 || board[x3+s][y3] == 11);
}
}
}
【问题讨论】:
-
board[x3 - 1]例如,如果x3 == 0是不好的。 -
... 与
board[x3+s][y3]类似,在while循环中更是如此,该循环递增s并在找到的 content 处终止。 -
注意编译器警告:
warning: statement will never be executed [-Wswitch-unreachable]forint s = 0; -
我建议你使用
enums 来表示片段或状态,而不是像11这样的硬编码。 -
发布的代码几乎没用。请发布minimal reproducible example,以便我们重现问题并帮助您调试。
标签: c segmentation-fault