我正在移植一个在Linux上开发到iOS的库(https://github.com/uzh-rpg/rpg_svo)。目标设备是iPhone 6 plus。在第一步中,我们设法将其移植到Windows。此外,我们成功地让它在iPhone的xcode模拟器上运行。但是当试图在iPhone上启动它时,应用程序在几个周期后崩溃并出现以下错误:
malloc: *对象0x12ce8c3d8的错误:释放对象的校验和不正确 - 对象可能在被释放后被修改。 * 在malloc_error_break中设置断点以进行调试
更糟糕的是,崩溃是不可重复的。有时候有时候会很快崩溃。由于它在模拟器中运行得很好,我们不能使用像“Guard Malloc”这样的内存管理工具。我们尝试了'Leaks'和'Zombies'Instruments而没有任何成功。
我们知道iPhone使用ARM_NEON指令集,而在Mac Book上我们有SSE2。这可能是个问题吗? 此外,库依赖于Boost线程。这可能是一个多线程问题吗?是什么让它在设备上崩溃但不在模拟器中崩溃?我们可能错过了一个非常基本的观点吗?
提前致谢!期待回复:)
答案 0 :(得分:0)
解决方案:
您必须使用以下标志
编译Boost for iOS-DBOOST_SP_USE_SPINLOCK
你可以在我的boost编译脚本中设置已经设置的标志: https://github.com/danoli3/ofxiOSBoost/tree/master/scripts
有关此Boost线程问题的更多信息,请访问: https://stackoverflow.com/a/14738583/1676524
在此博客上彻底解决了问题:http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu/