c - 使用指针改变矩阵

标签 c arrays pointers matrix reversi

在我们的 c 类(class)中,老师给了我们一个构建“Reversi”游戏的迷你项目。我在构建电路板时遇到问题。

#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");
    }
}

我检查了程序,程序得到:

Run-time check failure #2 - Stack around the variable 'Board' was corrupted

当它更改第三行的第一个 X 时。 例如,如果我运行程序直到第 2 行 (16) 的末尾, 我不会收到此错误。

最佳答案

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

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

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

相关文章:

c++ - 当输入到结构点中的双指针数组时程序崩溃

C 用户输入不起作用(c、lua)

用 sed 's//' 复制

java - 如何以编程方式在二维数组中插入值?

java - 为了确定而创建一个大数组是不是很糟糕?

c++ - reverse() 和学习指针

c - 访问不同 c 文件中 pthread 中的全局变量

c - 关于C中的结构

javascript - 检查某些字符串(即使有空格)是否在数组中

c - 使用循环将 Char 值添加到链接列表 [C]