STLport崩溃(竞争条件,只有达尔文?)

时间:2010-03-05 14:32:06

标签: c++ gcc crash darwin stlport

当我在达尔文上运行STLport时,我遇到了一个奇怪的崩溃。 (除了在Mac上以外的任何地方都没有看到它,但在i686和PowerPC上都完全相同。)这就是它在gdb中的样子:

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似乎远远落后于功能。我也知道它必须是某种类型的竞争条件,因为它不会仅通过调用此方法(implicity称为)而发生。崩溃主要发生在我推动系统,运行10个同时执行大量字符串处理的线程时。

我提出的其他理论与编译器标志(配置脚本)和g ++ 4.2错误有关(似乎4.4.3在Mac上还没有支持Objective-C,我需要链接)。< / p>

帮助!!! :)

编辑:我运行单元测试,可以执行各种操作。当我启动推送系统的10个线程时会出现此问题;它始终归结为std :: string :: append,最终归结为_M_allocate。由于我甚至无法获得导致问题的代码的下降转储,我认为我做的事情很糟糕。可能是这样,因为它试图在指令指针0x000 ... 000处执行? dynlibs是否在Windows中用跳转表构建为DLL?也许是因为某种原因这样的跳转表被覆盖了?这可能解释了这种行为。 (代码很大,如果我用完其他想法,我会在这里发布一个最小的崩溃样本。)

2 个答案:

答案 0 :(得分:1)

嗯.. STLPort使用分配器,它需要平台内存并在内部将其汇集到数据结构中。

只需检查崩溃何时发生,给执行线程的堆足以使alloc发生。即使alloc失败,也可能发生崩溃。

我不确定您正在处理的当前配置中STL分配器的粒度。检查stl_config.h。

答案 1 :(得分:0)

此问题是由unrelated crash bug引起的,导致内存覆盖导致STLport崩溃。