如何检测c程序中的运行时错误?

时间:2015-11-14 17:01:31

标签: c segmentation-fault runtime-error indexoutofboundsexception sigsegv

我的代码的以下部分出现运行时错误。

int sacrificeCounter(int board[][5], int row, int col, int count)
{
    if ((row >= 0) && (row < 5) && (col >= 0) && (col < 5))
    {
        if (row > 0)
            if (containsElement(&topSacrifice[0], board[row][col], 3))
                if (containsElement(&notToChoose[0], board[row - 1][col], 6))
                {
                    count = sacrificeCounter(board, row - 1, col, count + 1);
                }
        if (row < 4)
            if (containsElement(&bottomSacrifice[0], board[row][col], 3))
                if (containsElement(&notToChoose[0], board[row + 1][col], 6))
                {
                    count = sacrificeCounter(board, row + 1, col, count + 1);
                }
        if (col > 0)
            if (containsElement(&leftSacrifice[0], board[row][col], 3))
                if (containsElement(&notToChoose[0], board[row][col - 1], 6))
                {
                    count = sacrificeCounter(board, row, col - 1, count + 1);
                }
        if (col < 4)
            if (containsElement(&rightSacrifice[0], board[row][col], 3))
                if (containsElement(&notToChoose[0], board[row][col + 1], 6))
                {
                    count = sacrificeCounter(board, row, col + 1, count + 1);
                }
    }
    return count;
}

Dev cpp编译窗口冻结并关闭。有时,它会在关闭编译窗口之前显示 SIGSEGV错误。我搜索了SIGSEGV并发现它主要是在数组边界超出时引起的。但我不知道它超出了哪里。我添加了一个额外的if条件(连续三个中的第一个)以确保数组索引保持在其边界内。但没有帮助。

当我评论count=sacrifice...(所有四行)时,没有错误。但是,当然,我没有得到所需的输出。这里board是5x5矩阵。在调用函数时,rowcol值都介于0-4和count之间,值为1。

  

注意: - 我在整个代码中只调用此函数一次。但是,它是一个多次调用自身的递归函数。

0 个答案:

没有答案