很长一段时间后我又回到了 C++,我想用风格来做这件事,所以我一头扎进了 libCinder 并开始做我以前很少做的事情(即使那时我还是因为一些原因更喜欢 Qt )。这个计划有什么问题?
问题是很少这样做,尤其是当我使用调试配置文件从 Xcode 内部运行我的代码并系上几条安全带(又名调试器)时,但随后我不得不陷入困境并且发生了令人讨厌的事情:用户也得到了兴奋,有些东西不够紧,最终我的应用程序悲惨地崩溃了。
我设法将罪魁祸首缩小到 PilotStudyApp::draw() 函数(参见此处的代码https://github.com/Morpheu5/PilotStudy),很可能是在最后一个 for 循环附近,即通过 _activePoints 的那个,但我不能确定,正如你从 bt 看到的那样
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libstdc++.6.dylib 0x914635e4 std::_Rb_tree_increment(std::_Rb_tree_node_base*) + 15
1 org.cinder.PilotStudy 0x000916b3 PilotStudyApp::draw() + 419
2 org.cinder.PilotStudy 0x000c34ad -[CinderView drawRect:] + 125
您可以在这里完全看到:http: //pastebin.com/izZcFy8p
我有一种强烈的感觉,我的 C++-fu(或缺乏)出了点问题,所以如果你们能发现我忽略的东西,我将非常感激(因为我不想去处理,它会感觉要回幼儿园了:)
编辑:我突然想到 STL 可能不是线程安全的,所以同步或制作本地副本应该可以解决吗?