Openapoc: [クラッシュ]エイリアンの発見されたミッションで(セグメンテーション違反)

作成日 2019年03月09日  ·  5コメント  ·  ソース: OpenApoc/OpenApoc

リアルタイムモードでのミッション中にクラッシュ

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)情報スタック

0 OpenApoc :: BattleHazard :: update(this = 0x60000000d、state = ...、ticks = 1)

at /home/atrosha/OpenApoc/game/state/battle/battlehazard.cpp:490

1 OpenApoc :: Battle :: updateの0x00000000007378f1(this =

state=..., ticks=1)
at /home/atrosha/OpenApoc/game/state/battle/battle.cpp:1675

2 OpenApoc :: GameState :: updateの0x00000000008aa757(this = 0x5989410、ticks = 1)

at /home/atrosha/OpenApoc/game/state/gamestate.cpp:959

3 OpenApoc :: BattleView :: updateの0x000000000052bf2d(this =)。

at /home/atrosha/OpenApoc/game/ui/tileview/battleview.cpp:1443

4 OpenApoc :: Framework :: runの0x00000000004569b8(this = 0xfd14d0、

initialStage=...) at /home/atrosha/OpenApoc/framework/framework.cpp:584

5メインの0x000000000043a1d4(argc =、argv =)。

at /home/atrosha/OpenApoc/game/main.cpp:26`
!BUG! HIGH PRIORITY !BUG! low priority

最も参考になるコメント

536はこれを修正するかもしれませんが、このバグはブルームーンに一度発生するため、テストするのは難しいでしょう。 プルリクエストをマージしたらこの問題を閉じ、バグが続く場合は再度開きます。

全てのコメント5件

うーん、BattleHazard :: update()がジャンクオブジェクトで呼び出されているようです-0x60000000dはヒープポインタに対して正常に見えません...。

これは無効化されたイテレータが原因だと思います。 BattleHazard::updateBattleHazard::expandを呼び出すことになり、近くのBattleHazardでdie()を呼び出す可能性があります。 破壊されたハザードがイテレーションの次のハザードである場合、 Battle::update使用されているイテレーターは無効になります(https://en.cppreference.com/w/cpp/container/set/eraseを参照)

これは私が考えることができる唯一の説明です

529を使用すると、そのミッションでゲームがより頻繁にクラッシュします。 しかし、誰もそれに反応しません。 えーと...

また、後でエラーなしでリアルタイムモードでそのミッションを終了しました。

とても奇妙。

536はこれを修正するかもしれませんが、このバグはブルームーンに一度発生するため、テストするのは難しいでしょう。 プルリクエストをマージしたらこの問題を閉じ、バグが続く場合は再度開きます。

素晴らしくて速い応答。 次のビデオであなたのことを話してもいいですか?

このページは役に立ちましたか?
0 / 5 - 0 評価