Choque durante la misión en modo de tiempo real
listado de gdb
`Señal recibida" principal "del hilo 1 SIGSEGV, Fallo de segmentación.
OpenApoc :: BattleHazard :: update (esto = 0x60000000d, estado = ..., ticks = 1)
en /home/atrosha/OpenApoc/game/state/battle/battlehazard.cpp:490
490 si (ticksUntilVisible> 0)
(gdb) pila de información
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, parece que BattleHazard :: update () está siendo llamado en un objeto basura -0x60000000d no parece cuerdo para un puntero de montón ...
Creo que esto se debe a un iterador invalidado: BattleHazard::update
puede terminar llamando a BattleHazard::expand
, que a su vez puede llamar a die()
en un BattleHazard cercano. Si el peligro destruido es el siguiente en la iteración, entonces el iterador usado en Battle::update
deja de ser válido (consulte https://en.cppreference.com/w/cpp/container/set/erase)
Esta es la única explicación que se me ocurre
Además, terminé esa misión en modo de tiempo real sin ningún error más tarde.
Tan extraño.
Respuesta agradable y rápida. ¿Puedo mencionarlos en mi próximo video?
Comentario más útil
536 podría solucionar esto, pero será difícil de probar ya que este error ocurre una vez en una luna azul. Deberíamos cerrar este problema una vez que fusionamos la solicitud de extracción y reabrir si el error persiste.