Переменная изменяется внутри цикла без причины - PullRequest
0 голосов
/ 08 января 2012
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, поэтому ничего не должно происходить.

Вставить соответствующий код: http://pastebin.com/Q7jyZYrR Требуется SFML, если вы закомментируете части, которые его используют, сбой не произойдет.

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Я предполагаю, что вы переполняете массив cell [] [], если высота является четным числом из-за циклов, использующих h <= height в качестве конечного условия. Например, рассмотрим height=2, что составляет cells[][1], и вы переполняетесь, когда h=2 на cells[][h/2] => cells[][1]. Это также произойдет, если ширина будет четной.

Либо измените условие конца двух циклов на <, либо увеличьте размер массива cells на единицу в каждом измерении.

0 голосов
/ 08 января 2012

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++) 
{ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...