lambda回调中Android Cocos2D-X应用程序上的SEG故障
Seg fault on Android Cocos2D-x app in lambda callback
我在cocos2d-x游戏的Android版本中遇到了一个奇怪的崩溃问题。
在许多地方,我有回调在完成其他操作时执行的回调,如下调用:
playAnimationOnce(animationName, [this] {
m_animationStateMachine->changeState(TWITCHING_ANIM_STATE);
m_stateMachine->changeState(DEAD);
});
在Android上,m_animationStateMachine
可以很好地更改状态,但是,对m_stateMachine
进行任何参考是造成崩溃的,特别是:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x3f800044
Stack frame #00 pc 008ed5ec /data/app/com.bundleID.appname/lib/arm/libcocos2dcpp.so (_ZN12StateMachine11changeStateEPK5StatePKv+52): Routine StateMachine::changeState(State const*, void const*) at /path/to/project/proj.android-studio/app/jni/../../../Platform/Util/StateMachine.cpp:158
Stack frame #01 pc 007ef73c /data/app/com.bundleID.appname/lib/arm/libcocos2dcpp.so: Routine operator() at /path/to/project/proj.android-studio/app/jni/../../../Source/Actors/Hero.cpp:1291
游戏在iOS上正常工作。我什至已经在iOS的XCode上介绍了回调的执行,并验证了该对象在iOS上有效。
我没有办法在Android上使用调试器,因此我不能比日志语句更好地检查每个变量。
我已经尝试过的事情:
- 使用
[&]
而不是[this]
捕获 - 仅使用两个状态制作
StateMachine
的全新实例,这也导致崩溃。
还有我目前忘记的其他几件事。随时向我发送所有建议,我不知道会导致这一点。
我弄清楚了。
我仍然不知道Android会引起问题,因此,如果您这样做,请告诉我。
本质上,执行m_animationStateMachine->changeState
时,新的动画会播放当前运行动画的新动画,并使用COCOS2D-X方法清除动画回调。
我相信,这会导致m_animationStateMachine->changeState
之后的所有线路在某些不确定的上下文中执行。
我通过使m_animationStateMachine->changeState
成为回调的最后一行,并在播放新动画之前更改类状态。
将此作为答案,以便我可以在几天内解决这个问题,也许将来对其他人有帮助。
相关文章:
- cout 在我的程序上无法正常工作,有人可以帮助我吗?
- 视窗 10 :笔(手写笔)在 MFC 应用程序上不起作用
- c++程序上的奇怪编译错误
- 使用代码在 AWS 开发工具包C++控制台应用程序上设置凭证
- 在C++程序上同时运行的不同任务
- OutputDebugString在Windows通用应用程序上的位置?以及如何从OutputDebugString捕获
- 按下Arduino按钮后,如何在C#应用程序上执行操作
- Windows10 上的 VS Code + WSL 应用程序上的 CMake 扩展
- 为什么在此C++程序上添加负整数会导致正整数?
- 如何在没有第三方库的C 程序上显示图形
- 我被困在为计算机科学课编写的C++程序上
- 如何修复程序上的错误以衡量性能
- lambda回调中Android Cocos2D-X应用程序上的SEG故障
- 如何在Qt Android应用程序上禁用屏幕保护程序
- 如果我在 Xbox UWP 应用程序上收到激活错误并且错误消息中没有任何有用的内容,该怎么办
- 如何防止从浏览器查看图像,但允许在桌面应用程序上
- ShowCursor(FALSE) 不会在控制台应用程序上隐藏光标
- 在C 程序上嵌入Ruby源的错误
- 我在这个程序上遇到了麻烦.只有1个编译错误
- 在已经运行的C 控制台应用程序上实现QT GUI