内部for循环变量无缘无故

时间:2012-01-07 21:53:13

标签: c++ loops for-loop

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,如果你注释掉使用它的部分,则不会发生崩溃。

2 个答案:

答案 0 :(得分:2)

如果高度为偶数,由于使用h <= height作为结束条件的循环,我猜你会溢出cells [] []数组。例如,考虑height=2 cells[][1]h=2 cells[][h/2] cells[][1] < cells。如果宽度均匀,也会发生这种情况。

将两个循环的结束条件更改为{{1}}或将每个维度中{{1}}数组的大小增加一个。

答案 1 :(得分:0)

widthfor循环中的条件,但您正在更改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++) 
{