リアルタイムモードでのミッション中にクラッシュ
gdbリスト
`スレッド1"メイン "受信信号SIGSEGV、セグメンテーション違反。
OpenApoc :: BattleHazard :: update(this = 0x60000000d、state = ...、ticks = 1)
/home/atrosha/OpenApoc/game/state/battle/battlehazard.cpp:490で
490 if(ticksUntilVisible> 0)
(gdb)情報スタック
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`
うーん、BattleHazard :: update()がジャンクオブジェクトで呼び出されているようです-0x60000000dはヒープポインタに対して正常に見えません...。
これは無効化されたイテレータが原因だと思います。 BattleHazard::update
がBattleHazard::expand
を呼び出すことになり、近くのBattleHazardでdie()
を呼び出す可能性があります。 破壊されたハザードがイテレーションの次のハザードである場合、 Battle::update
使用されているイテレーターは無効になります(https://en.cppreference.com/w/cpp/container/set/eraseを参照)
これは私が考えることができる唯一の説明です
また、後でエラーなしでリアルタイムモードでそのミッションを終了しました。
とても奇妙。
素晴らしくて速い応答。 次のビデオであなたのことを話してもいいですか?
最も参考になるコメント
536はこれを修正するかもしれませんが、このバグはブルームーンに一度発生するため、テストするのは難しいでしょう。 プルリクエストをマージしたらこの問題を閉じ、バグが続く場合は再度開きます。