当我在达尔文运行STLport时,我得到一个奇怪的崩溃。 (没见过比它在Mac上其他地方,但完全相同的东西碰撞双方的i686和PowerPC)。这就是它看起来像在gdb:STLport崩溃(比赛条件,只有达尔文?)
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 21097]
0x000000010120f47c in stlp_std::__node_alloc_impl::_M_allocate()
它可能在STLport中的一些设置,我注意到Mac.h和MacOSX.h在功能上似乎远远落后。我也知道它一定是某种竞争条件,因为它不会仅仅通过调用这个方法(隐含调用)而发生。崩溃主要发生在我推送系统时,运行10个同时执行大量字符串处理的线程。
我想到的其他理论与编译器标志(configure脚本)和g ++ 4.2错误(似乎4.4.3不在Mac上,ObjectiveC支持,我需要链接)有关。
HELP !!! :)
编辑:我运行单元测试,它做各种事情。当我启动推送系统的10个线程时会出现此问题;它总是归结为std :: string :: append,最终归结为_M_allocate。由于我甚至无法得到导致问题的代码的下降转储,所以我认为我做的不好。它是否会如此,因为它试图在指令指针0x000 ... 000处执行? dynlibs是否在Windows中使用跳转表构建为DLL?可能是因为某种原因,这样的跳转表被覆盖了吗?这可能会解释这种行为。 (代码是巨大的,如果我用完其他想法,我会在这里发布一个最小崩溃示例。)
你不能“运行”STLport - 它是一个库 - 你写的是什么C++代码导致崩溃? – 2010-03-05 14:36:05
Neil说了什么,还有,值得一看的是代码是如何线程安全的。 – 2010-03-05 14:37:38