c - 使用指针改变矩阵
问题描述
在我们的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) 的末尾,我不会收到此错误。
解决方案
我认为将板子初始化为 char 类型并在函数中使用指针和 int 类型的数组可能存在问题。Char 的大小为 1 个字节,而 int 的大小取决于平台(大多数情况下为 4 个字节)。这将导致操作和循环数组时出现内存问题。
在您的情况下,看起来您在 2 行之后循环了整个分配的内存,因为您使用了 int 类型的指针。在您的情况下, Int 可能比 char 大 4 倍,导致循环遍历 char 类型的整个数据结构的速度比您预期的快 4 倍。
推荐阅读
- python - 如何在 re.sub() 中设置正则表达式搜索的停止条件
- python - 如何在 PyCharm 中运行 Django 单元测试?
- c++ - 从 MAT 文件中读取 C 应用程序中的自定义类
- java - 使用关闭挂钩时 Java 应用程序以错误代码终止
- python - 从另一个 QMainWindow 调用时,QMainWindow 消失
- intellij-idea - 是否可以让 IntelliJ 识别并显示 Istio 对象的工具提示?
- django - 未覆盖管理模板上的阻止内容
- javascript - Gulp 你忘记发出异步完成信号了吗
- matlab - 如何以 if-then 规则的形式查看预测的分类模型
- symfony - 如何使用用户名或电子邮件实现身份验证