Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++, Dziwne zachowanie zmiennych globalnych

Ostatnio zmodyfikowano dzisiaj: 1h » 49 min
Autor Wiadomość
czerwonymoskit
Temat założony przez niniejszego użytkownika
C++, Dziwne zachowanie zmiennych globalnych
» 2026-09-24 17:34:20
Mam grę. Zmienne do pliku main dołączam poprzez
#include "zmienne.hpp"
W tym pliku mam wszystkie .hpp wszystkich funkcji void używanych w grze oraz extern dla wszystkich zmiennych. Same zmienne definiuje i inicjalizuje w pliku zmiennne.cpp.

Gra normalnie działa ale czasami niektóre zmienne globalne mają chaotyczne wartości. Niekiedy muszę siłowo przypisywać wartość 0 na początku main'a, choć ta wartość powinna wynosić 0 na tym etapie i nigdzie nie jest nadpisywana jeszcze w tym momencie. Raz na jakiś czas, bardzo rzadko ale jednak mieszają mu sie wartości i zamiast 0 jest 1.

Strasznie to dziwne.
P-184656
DejaVu
» 2026-09-24 18:05:13
Początkowy stan powinieneś zawsze zainicjalizować, a... tak poza tym to pewnie masz jakieś błędy w kodzie, których nie widzisz.
P-184657
czerwonymoskit
Temat założony przez niniejszego użytkownika
» 2026-09-24 19:08:11
Inicializuję te zmienne w pliku zmienne.cpp
Raczej nie jest to jakiś błąd w składni gdyż gra normalnie lata tylko czasem potrafi się zachować dziwnie.
P-184658
czerwonymoskit
Temat założony przez niniejszego użytkownika
» 2026-09-24 19:20:04
Nie wiem, może przeniosę definicje tych zmiennych do main'a.
Ale gra jest best. Najlepszy mecz manager ever ;). Bez bajerów, wodotrysków ale skomplikowany dość.
P-184659
czerwonymoskit
Temat założony przez niniejszego użytkownika
» 2026-09-25 12:52:19
Uzywam sporo zmiennych globalnych i przy przekroczeniu indexu może byc nadpisywany sąsiedni sektor pamięci. Pozamieniam je na lokalne w funkcjach. To powinno pomóc.
P-184660
pekfos
» 2026-09-25 15:00:34
Uzywam sporo zmiennych globalnych i przy przekroczeniu indexu może byc nadpisywany sąsiedni sektor pamięci. Pozamieniam je na lokalne w funkcjach. To powinno pomóc.
Jeśli mogą to powinny być lokalne, ale jeżeli nadpisujesz niepoprawnie pamięć to to nie pomoże bo nie naprawiasz problemu. Możesz spróbować narzędzi typu ASan (address sanitizer) żeby zlokalizować problem.

Niekiedy muszę siłowo przypisywać wartość 0 na początku main'a, choć ta wartość powinna wynosić 0 na tym etapie
Niepoprawne wartości na samym początku programu są trochę dziwne. Upewnij się że nie obserwujesz tych wartości w czasie pracy konstruktora klasy, której obiekt jest sam zmienną globalną. Konstruktory zmiennych globalnych same też się wykonują w jakiejś kolejności i możesz widzieć niezainicjalizowane zmienne (też wymagające wywołania konstruktora). Przy czym to dotyczy przypadku gdzie inicjalizacja zmiennej wymaga wykonania kodu. Jeżeli nie wymaga, takie zmienne globalne są inicjalizowane w czasie ładowania programu i będą gotowe zanim program zdąży wykonać cokolwiek.
P-184661
« 1 »
  Strona 1 z 1