c++ - C++ 变量在调用不相关的函数后神秘地改变了
问题描述
我正在制作的棋盘游戏程序有以下代码。函数“copyMap”只是将第一个数组映射的内容复制到第二个数组 map_copy。在函数“求解器”中,我有一个循环遍历游戏网格,并且对于每个单元格,调用 copyMap。
问题是,当求解器被调用时,它会运行 1 次迭代,然后立即使程序崩溃。此外,应该从 0 和 0 开始的迭代器 x_pos 和 y_pos 在调用 copyMap 之后和程序崩溃之前被更改为 2 和 5。
void copyMap(int map[][WIDTH], int map_copy[][WIDTH], int rows_to_copy) {
// copy the contents of the first rows_to_copy rows of map to map_copy
for( int i = 0 ; i < rows_to_copy ; i++ ) {
for( int j = 0 ; j < WIDTH ; j++ ) {
map_copy[i][j] = map[i][j];
cout<<i<<" "<<j<<endl;
}
}
}
int solver(int map[][WIDTH]) {
int map_copy[HEIGHT][WIDTH];
for(int x_pos = 0 ; x_pos < HEIGHT ; x_pos++ ) {
for(int y_pos = 0 ; y_pos < WIDTH ; y_pos++ ) {
copyMap(map, map_copy, MAX_ROWS);
cout<<x_pos<<" "<<y_pos<<endl;
}
}
}
这是控制台输出:(对于循环的第一次迭代)
0 0
0 1
0 2
...
81 8
2 5
游戏网格有 81 行 9 列,所以 copyMap 打印 0 0, 0 1, ..., 81 8。然后,solver 打印 2 5。但是,迭代器仍然应该是 0 0。迭代器没有通过完全到函数copyMap。为什么它们的值会发生变化,为什么我的程序会崩溃?
我将不胜感激在这个问题上的任何帮助,谢谢。
解决方案
Copymap 遍历每个元素。我认为您不需要在求解器内的嵌套循环中调用它。你应该把它放在循环之外,并在循环内设置一个断点来观察 x_pos 和 y_pos。
推荐阅读
- mongodb - 如何让 mongod 默认从 /bin/mongod.cfg 加载配置?
- mysql - MySQL 触发器与 If 循环和信号
- c++ - 使用自定义反射将对象序列化为 JSON
- javascript - 如何访问映射 json 数组并通过 id 搜索对象并更改该对象中的值
- vba - Excel在匹配单元格时返回整行
- google-admin-sdk - 使用 Admin SDK 自动将成员添加到 google 组(G-suite)的问题
- maven - maven依赖:仅列出第一级
- java - eclipse java中编码的UTF-8代码和不可读的字符
- javascript - 如何通过直接传入对象来使用 react this.setState 更新状态
- javascript - XSLT如何仅对XML文档的字符串节点中的数值进行排序