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ć?