当我在达尔文上运行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似乎远远落后于特性。我还知道,它必须是某种类型的竞赛条件,因为它并不是通过调用此方法来实现的(隐式调用)。崩溃主要发生在我推送系统时,运行10个同时执行字符串处理的线程。
我想出的其他理论与编译器标志(配置脚本)和g++ 4.2 bug有关(似乎4.4.3还没有出现在Mac上,需要链接到Objective支持)。
救命! :)
编辑:我运行单元测试,它做各种事情。当我启动10个推动系统的线程时,就会出现这个问题;问题总是归结为std::string::append,它最终归结为_M_allocate。由于我甚至无法得到导致问题的代码的下降转储,我想我正在做一些坏事。既然它试图在指令指针0x000.000处执行,它会是这样吗?在带有跳转表的Windows中,动态库是否构建为DLL?也许是因为某种原因,这样的跳台被覆盖了吗?这很可能解释了这种行为。(代码很大,如果我没有其他想法,我会在这里发布一个最小的崩溃示例。)
发布于 2010-03-29 08:21:56
这个问题是由unrelated crash bug引起的,在我的例子中,这会导致内存覆盖导致STLport崩溃。
发布于 2010-03-09 07:44:37
嗯..。STLPort使用分配程序,在需要时将平台内存在内部集中到数据结构。
只要检查崩溃发生的时间,分配给正在执行的线程的堆就足以发生分配。即使失败了,这种崩溃也有可能发生。
我不确定您正在处理的当前配置中STL分配程序的粒度。请查看stl_config.h的相关信息。
https://stackoverflow.com/questions/2387403
复制相似问题