我正在编写一个利用'网格'的游戏,我使用2维结构数组创建,其中包含char值和布尔值。在我的程序的.h文件中,我声明了结构并创建了网格。
struct Tile
{
char letter;
bool active;
};
Tile grid [6][5];
在我的.cpp文件中,我初始化网格,以便所有值都为空。
for (int i = 0; i < 7; ++i)
{
for (int j = 0; j < 6; ++j)
{
grid[i][j].active == false;
//grid[i][j].letter = '.';
//it always crashes when i try doing the above line
}
}
打印网格printGrid的函数位于
之下for (int i = 0; i < 7; ++i)
{
for (int j = 0; j < 6; ++j)
{
cout << i;
//the above statement is for debugging purposes so that I can see
//which column easier
std::cout << grid[i][j].letter;
}
std::cout << std::endl;
}
cout << "1 2 3 4 5 6" << endl;
现在,最初的目标是将默认的.letter值设为'。'。但出于某种原因,当我试图这样做时,会有灾难性的后果;屏幕填满了人物移动如此之快我无法完全看到它们是什么(我记得一些心和笑脸),以及令人讨厌,快速的哔哔声。所以我决定退出那条注释线。
当我在没有该行的情况下运行程序时,由于某种原因,“网格”总是在某些位置显示字符,没有来自用户的任何输入,或者没有我明确声明该位置的任何值。例如,左边和底行的第一列的点总是有一个字符(grid [6] [5] .letter)。每次运行程序时它都会发生变化,我看到它的范围从心脏到字母A到西班牙语'n'(带有〜超过它的那个)。
我心想,“嘿,因为网格[6] [5]是总是错误的点,我只会声明那些个别地点的.letter值为空白('')!”。那没用。
我不知道为什么这一个地方给我带来了麻烦。还有其他区域会出现异常,但我可以通过将其.letter值设置为空白来中和它们。如果有人知道如何解决这个问题,请求
编辑:出现在网格[6] [0],网格[6] [1],网格[6] [5]和网格[6] [4]中的其他异常字符都使我的程序如果我将它们设置为空白(''),则在后续阶段崩溃;然而,消隐网格[6] [5]是一个让它在开始时崩溃的网格。我尝试使用调试器,但它无法告诉我任何有用的信息。
答案 0 :(得分:2)
你正在数组的末尾运行
Tile grid [6][5];
必须为Tile grid [7][6];
或者您只需要循环到i < 6
和j < 5
。