在实时模式下执行任务时崩溃
gdb 列表
`线程 1“主”收到信号 SIGSEGV,分段错误。
OpenApoc::BattleHazard::update (this=0x60000000d, state=..., ticks=1)
在 /home/atrosha/OpenApoc/game/state/battle/battlehazard.cpp:490
490 如果(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 可能会修复此问题,但由于此错误在蓝色月亮中发生一次,因此很难测试。 我们应该在合并拉取请求后关闭此问题,如果错误仍然存在,则重新打开。