首页 > 解决方案 > 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。为什么它们的值会发生变化,为什么我的程序会崩溃?

我将不胜感激在这个问题上的任何帮助,谢谢。

标签: c++variablesmemory

解决方案


Copymap 遍历每个元素。我认为您不需要在求解器内的嵌套循环中调用它。你应该把它放在循环之外,并在循环内设置一个断点来观察 x_pos 和 y_pos。


推荐阅读