C++, Dziwne zachowanie zmiennych globalnych
Ostatnio zmodyfikowano dzisiaj: 1h » 49 min
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. |
|
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. |
|
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. |
|
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ść. |
|
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. |
|
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. |
|
| « 1 » |