libC++是否维护一个进程范围的内部状态,其中在代码的一部分中发生的操作可以通过调用std :: * classes(例如std :: set)来影响代码的某些远端部分?要多一点具体的我见过崩溃像这样(只显示堆栈跟踪的顶部):libC++是否保持内部状态?
std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__insert_unique(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 156, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
,其中修复了升级不直接发生碰撞库,以纠正一个C++ ABI问题。我只是感到惊讶,一个ABI问题可能会对此产生影响,并且怀疑标准库本身是否存在某种状态损坏?
全局'operator new'和'operator delete'维护每个进程的堆。它们被'std :: allocator'使用,所以(默认情况下)被任何分配内存的标准类使用,并且似乎在这里被牵连。破坏堆可能会破坏使用它的任何其他代码。 – 2015-02-23 18:27:27
'std :: __ 1'的错误通常表示您使用的是LLVM的** libC++ **,而不是GNU的** libstdC++ **。 – Macmade 2015-02-23 18:27:37
@Macmade好点让我重新安排我的问题在一瞬间...... – wilsonmichaelpatrick 2015-02-23 18:33:23