c++ - STLport 崩溃(竞争条件,仅限 Darwin ?)

标签 c++ gcc crash darwin stlport

当我在 Darwin 上运行 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 错误有关(似乎 4.4.3 在 Mac 上还没有支持 Objective-C,我需要与之链接)。

求助!!! :)

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

最佳答案

嗯.. STLPort 使用分配器获取平台内存并在需要时将其内部池化到数据结构中。

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

我不确定您正在使用的当前配置中的 STL 分配器的粒度。检查 STL_config.h。

关于c++ - STLport 崩溃(竞争条件,仅限 Darwin ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387403/

相关文章:

c++ - Scons 选择哪个版本的g++ |无法识别的命令行选项 "-std=c++11"

c++ - 无法在 Qt5/cmake 项目中加载 Qt 资源文件中指定的图像

c++ - 使用 ld 创建依赖于另一个共享库的共享库

c++ - 使用 OpenCV 通过直方图查找 HSV 阈值

c++ - 为什么隐藏符号仍然添加到 DSO

delphi - 为什么有时需要重新启动 Delphi 7 才能使调试器工作

使用共享库交叉编译应用程序

gcc - LLVM 与 GCC MIPS 代码生成,任何基准?

vb6 - APPCRASH - myapp.exe 从 VB6 开始崩溃

c++ - cin 在 12 次 for 循环迭代后使我的程序崩溃?