Absturz während der Mission im Echtzeitmodus
gdb-Auflistung
`Thread 1 "Haupt"-Empfangssignal SIGSEGV, Segmentierungsfehler.
OpenApoc::BattleHazard::update (this=0x60000000d, state=..., ticks=1)
unter /home/atrosha/OpenApoc/game/state/battle/battlehazard.cpp:490
490 if (ticksUntilVisible > 0)
(gdb) Info-Stack
at /home/atrosha/OpenApoc/game/state/battle/battlehazard.cpp:490
state=..., ticks=1)
at /home/atrosha/OpenApoc/game/state/battle/battle.cpp:1675
at /home/atrosha/OpenApoc/game/state/gamestate.cpp:959
at /home/atrosha/OpenApoc/game/ui/tileview/battleview.cpp:1443
initialStage=...) at /home/atrosha/OpenApoc/framework/framework.cpp:584
at /home/atrosha/OpenApoc/game/main.cpp:26`
Hmm, sieht so aus, als ob BattleHazard::update() für ein Junk-Objekt aufgerufen wird -0x60000000d sieht für einen Heap-Zeiger nicht vernünftig aus....
Ich denke, dies wird durch einen ungültigen Iterator verursacht: BattleHazard::update
kann dazu führen, dass BattleHazard::expand
aufgerufen wird, was wiederum die()
bei einem nahegelegenen BattleHazard aufrufen kann. Wenn die zerstörte Gefahr zufällig die nächste in der Iteration ist, wird der in Battle::update
verwendete Iterator ungültig (siehe https://en.cppreference.com/w/cpp/container/set/erase)
Das ist die einzige Erklärung, die mir einfällt
Außerdem habe ich diese Mission später im Echtzeitmodus ohne Fehler beendet.
So seltsam.
Nette und schnelle Antwort. Darf ich dich in meinem nächsten Video erwähnen?
Hilfreichster Kommentar
536 könnte dies beheben, aber es wird schwer zu testen sein, da dieser Fehler einmal in einem blauen Mond auftritt. Wir sollten dieses Problem schließen, sobald wir die Pull-Anfrage zusammenführen und erneut öffnen, wenn der Fehler weiterhin besteht.