【问题标题】:Segmentation fault in a recursive function that operates on char array in C在 C 中对 char 数组进行操作的递归函数中的分段错误
【发布时间】:2014-07-07 14:36:30
【问题描述】:

我正在用 C 语言编写井字游戏,但在游戏板上放置符号的功能存在问题。代码如下:

int aiPutSign(int difficultyLevel, char board[])
{
    if(difficultyLevel == 1)
    {
        srand(time(NULL));
        int field = rand() % 9;
        return board[field] == ' ' ? field : aiPutSign(difficultyLevel, board);
    } else if(difficultyLevel == 2)
    {
        //to do
        return 2;
    } else if(difficultyLevel == 3)
    {
        //to do
        return 3;
    }
}

不幸的是,我收到分段错误错误。我只知道递归存在问题并导致错误,但我不知道这是如何发生的以及如何修复它。

简而言之:棋盘是包含 9 个空格的 9 个字符数组,我在每个玩家的每一步移动后都在其中放置 X 和 O 符号。如果玩家(这里是计算机 AI)尝试在已填充的字段上签名,则递归进来并且 rand() 生成另一个字段数。

【问题讨论】:

  • 如果递归函数导致段错误,则暗示它不会终止(在您的情况下:board[field] == ' ' 始终为 0)。

标签: c arrays recursion char tic-tac-toe


【解决方案1】:

不要将srand(time(NULL)); 放入aiPutSign 函数中,每次调用都会得到相同的随机数。例如,在程序开始时调用一次srand

【讨论】:

  • 你说得对,谢谢!当函数试图在已经填充的字段上添加符号时,它会导致生成相同数字的无限循环,最终导致分段错误。
猜你喜欢
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2016-01-14
  • 2013-03-05
相关资源
最近更新 更多