Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STLport崩溃(仅限达尔文的比赛条件?)_C++_Gcc_Crash_Darwin_Stlport - Fatal编程技术网

C++ STLport崩溃(仅限达尔文的比赛条件?)

C++ STLport崩溃(仅限达尔文的比赛条件?),c++,gcc,crash,darwin,stlport,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:

当我在达尔文运行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-C支持,我需要与之链接)

帮助:)


编辑:我运行单元测试,可以做各种事情。当我启动10个线程来推动系统时,就会出现这个问题;它总是归结为std::string::append,最终归结为_M_分配。由于我甚至无法获得导致问题的代码的下降转储,我认为我做了一些不好的事情。因为它试图在指令指针0x000…000处执行,所以会是这样吗?DYNLIB是否在Windows中构建为DLL并带有跳转表?可能是因为某种原因,这样的跳转表被覆盖了吗?这或许可以解释这种行为。(代码非常庞大,如果我没有其他想法,我会在这里发布一个最低限度的崩溃示例。)

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

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


我不确定当前配置中STL分配器的粒度。检查stl_config.h以了解这一点。

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

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


我不确定当前配置中STL分配器的粒度。请检查stl_config.h以了解相关信息。

在我的情况下,此问题是由导致STLport崩溃的内存覆盖引起的。

在我的情况下,此问题是由导致STLport崩溃的内存覆盖引起的。

您无法“运行”STLPORT-这是一个库——你写的C++代码是什么导致崩溃?尼尔说了什么,但是,也值得看看代码是如何线程安全的。你不能“运行”STLPART——它是一个库——你写的什么C++代码导致崩溃?尼尔说什么,而且值得一看的是代码是如何/是否是线程安全的。我一直在研究该代码,但还没有真正理解可能出现的错误。那么你是说每个线程都被赋予了堆中的各个部分,这些部分永远不会被重新分配,即使空间不够?听起来非常容易出错。我将对此进行深入研究。我一直在研究代码,但还没有真正理解可能出现的错误。那么你是说每个线程都被赋予了堆中的各个部分,这些部分永远不会被重新分配,即使空间不够?听起来非常容易出错。我将进一步调查此事。