在我们的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/