在我们的c课程中,老师给了我们一个小项目来建立一个“反转”游戏。我在建董事会时遇到困难。

#define Size 8
int main()
{
    char Board[Size][Size] = { {" "} };
    resetBoard(Board);
    printBoard(Board);
    printf("\n");
    getch();
}
void resetBoard(int** board)
{
    for (size_t i = 0; i < Size; i++)
    {
        for (size_t j = 0; j < Size; j++)
        {
            *(board + (i * Size + j)) = 'x';
        }
    }
}
void printBoard(int board[Size][Size])
{
    for (size_t i = 0; i < Size; i++)
    {
        for (size_t j = 0; j < Size; j++)
        {
            printf("%c", board[i][j]);
            printf(" ");
        }
        printf("\n");
    }
}

我检查了程序,程序得到:
运行时检查失败2-变量“Board”周围的堆栈已损坏
当它改变第三行的第一个X时。
例如,如果我运行程序直到2d行(16)结束,
我不会犯这个错误的。

最佳答案

我认为在将板初始化为char类型以及在函数中使用int类型的指针和数组时可能会出现问题。Char的大小为1字节,int的大小根据平台而定(大多数情况下是4字节)。这将导致在数组上操作和循环的内存问题。
在您的例子中,由于您使用了int类型的指针,看起来您在两行之后循环了整个分配的内存。在您的例子中,int可能比char大4倍,从而导致循环整个char类型的数据结构的速度比您预期的快4倍。

关于c - 使用指针更改矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53526319/

10-11 22:12
查看更多