首页 > 解决方案 > 使用指针改变矩阵

问题描述

在我们的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 时。例如,如果我将程序运行到第 2 行 (16) 的末尾,我不会收到此错误。

标签: carrayspointersmatrixreversi

解决方案


我认为将板子初始化为 char 类型并在函数中使用指针和 int 类型的数组可能存在问题。Char 的大小为 1 个字节,而 int 的大小取决于平台(大多数情况下为 4 个字节)。这将导致操作和循环数组时出现内存问题。

在您的情况下,看起来您在 2 行之后循环了整个分配的内存,因为您使用了 int 类型的指针。在您的情况下, Int 可能比 char 大 4 倍,导致循环遍历 char 类型的整个数据结构的速度比您预期的快 4 倍。


推荐阅读