for(int g = 0; g <= width; g++)
{
std::cout << width << "\n";
std::cout << g << "\n";
for(int h = 0; h <= height; h++)
{
int rx = g;
int ry = h;
if(h == 0 || img.GetPixel(rx, ry - 1) == sf::Color::Black)
{
cells[g/2][h/2].up = true;
}
if(g == 0 || img.GetPixel(rx - 1, ry) == sf::Color::Black)
{
cells[g/2][h/2].left = true;
}
}
}
所以我在这里输入这段代码。宽度设置为197,它工作得很好,填满了整个数组。然而,当g点击196宽度时,随机变为453.我不知道发生了什么,有人可以帮助我吗?
这个程序的目的是循环一个数组,并在需要的时候为细胞分配墙(它是一个迷宫)。
我已经确认宽度在变化,而不是其他。我不明白为什么会有任何改变,但是没有其他线程在运行,而且img来自SFML,所以不会发生任何事情。
周围相关代码的Pastebin:http://pastebin.com/Q7jyZYrR 需要SFML,如果你注释掉使用它的部分,则不会发生崩溃。
答案 0 :(得分:2)
如果高度为偶数,由于使用h <= height
作为结束条件的循环,我猜你会溢出cells [] []数组。例如,考虑height=2
cells[][1]
,h=2
cells[][h/2]
cells[][1]
<
cells
。如果宽度均匀,也会发生这种情况。
将两个循环的结束条件更改为{{1}}或将每个维度中{{1}}数组的大小增加一个。
答案 1 :(得分:0)
width
是for
循环中的条件,但您正在更改width
的值
每个循环都有
width = img.GetWidth();
for(int g = 0; g <= width; g++)
{
width = img.GetWidth();
在for
循环之前把它放在外面..
width = img.GetWidth();
for(int g = 0; g <= width; g++)
{