Gra strategiczna – program wysypuje się, wiem gdzie, ale nie wiem dlaczego

0

Witam. Piszę grę strategiczną i program mi się wysypuje- wiem gdzie ale nie wiem dlaczego. Dodaję kod

if(zdarzenie.type == Event::MouseButtonPressed &&  zdarzenie.mouseButton.button == Mouse::Left){
        if(teksty[9].getGlobalBounds().contains(Vector2f(Mouse::getPosition(okno)))){
                status=2;
                przyg=1;
            }
else if (teksty[54].getGlobalBounds().contains(Vector2f(Mouse::getPosition(okno))) && iloscsojuszy!=5){
iloscsojuszy++;
}
else if (teksty[55].getGlobalBounds().contains(Vector2f(Mouse::getPosition(okno))) && iloscsojuszy!=0){
iloscsojuszy--;
}
}

Objaśniam:
status oraz przyg - od wartości tych zmiennych zależy jaki fragment kodu się wykonuje (aktualnie jesteśmy w status=3, a teksty[9] odpowiada za cofnięcie się do status=2)
teksty[54] i [55] to "Dodaj sojusz" oraz "Usuń sojusz" odpowiednio.
kliknięcie na usuwanie sojuszu działa prawidłowo, zaś na dodanie sojuszu już nie (tuż po inkrementacji program się wysypuje). Debugger wywala błąd: "Program received signal SIGSEGV, Segmentation fault.". Jest to naruszenie pamięci, ale dlaczego dekrementacja zmiennej może działać a inkrementacja nie?
Zakładam, że jeśli debugger nic nie wykrywa i kończy pracę z kodem 0, to nie ma naruszenia pamięci (dekrementacja iloscsojuszy działa). Iloscsojuszy jest zmienną typu int i jej domyśla wartość to 0. Jeśli trzeba więcej kodu to dodam, może inne pytania macie albo wiecie co może nie działać?

0

wyciek pamieci mozesz miec juz wczesniej. Zobacz pod debuggerem jakie wartosci maja. Wklej je tutaj takze

0

Co dokładnie mam wkleić?

0

Pokaż jak alokujesz iloscsojuszy

0

po prostu na początku main() int iloscsojuszy; później nadpisuję to na 0. Nie używam żadnych wskaźników. I przekazuję przez funkcję takie rzeczy poprzez referencję- w main tworzę zmienne i tablice i mam 3 główne funkcje w osobnych plikach które pracują na tych danych. Jedna przygotowuje potrzebne części- ustawia itd, druga obsługuje użytkownika czyli to co dałem i trzecia rysująca. Mam kilka takich zmiennych i wszystkie działają

0
if (iloscsojuszy>0){
    for (int i=56;i<=i+iloscsojuszy-1;i++){
        okno.draw(teksty[i]);
    }
}

Wstawiam część funkcji rysującej. Gdy ją ukryję to program się nie wysypuje. Teraz zacznę sprawdzać, może tutaj coś nie działa. W zależności od ilości sojuszy do wyświetlenia jest od 0 do 5 sojuszy czyli teksty[56]-[60].

Dobrze. Myślę że każdy widzi gdzie jest błąd, linijka z for to jakaś tragedia (faktycznie dekrementacja nie pozwala for na takie rzeczy). Problem rozwiązany, mam nadzieję że to było powodem błędu z pamięcią?

1

teksty[55] niech zgadnę twoja tablica ma 55 elementów :P.
wszelkie tablica[jakaśStałaWartość] to wskazówka na poważny błąd w strukturze programu.

0

Zamknijcie ten wątek skoro problem jest już rozwiązany.

0
MarekR22 napisał(a):

teksty[55] niech zgadnę twoja tablica ma 55 elementów :P.
wszelkie tablica[jakaśStałaWartość] to wskazówka na poważny błąd w strukturze programu.

Wiem o co Ci chodzi i faktycznie zdarzają się takie błędy, ale to nie oto tutaj chodziło :)
Racja, wątek można zamknąć, dzięki każdemu za wsparcie

1 użytkowników online, w tym zalogowanych: 0, gości: 1