stringstream 运算符<< 崩溃 (malloc_consolidate )

Posted

技术标签:

【中文标题】stringstream 运算符<< 崩溃 (malloc_consolidate )【英文标题】:stringstream operator<< crash (malloc_consolidate ) 【发布时间】:2011-01-28 07:20:51 【问题描述】:
Program terminated with signal 11, Segmentation fault.
#0  0x0000003663c70485 in malloc_consolidate () from /lib64/libc.so.6
(gdb) bt
#0  0x0000003663c70485 in malloc_consolidate () from /lib64/libc.so.6
#1  0x0000003663c72a6c in _int_malloc () from /lib64/libc.so.6
#2  0x0000003663c74cde in malloc () from /lib64/libc.so.6
#3  0x0000003d364af4aa in operator new(unsigned long) ()
   **/linux2.6-glibc2.3-x86_64/lib64/libstdc++.so.6
#4  0x0000003d364900ee in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&) ()
   from **/linux2.6-glibc2.3-x86_64/lib64/libstdc++.so.6

代码是:

...
       if (logger->isEnabledFor(Level::ALL)) \
            std::ostringstream oss; \
            oss << message; \
            logger->forcedLog(Level::ALL, oss.str(), __FILE__, __LINE__); \
         \
...

上面说过,ostringstream 的 operator

谢谢

【问题讨论】:

如果答案适合您,您可能想返回并将您的其他一些问题标记为已回答。此外,没有一个标准库在任何方面都一定是线程安全的,当前的标准对此完全保持沉默。 (实际上,我不知道有什么。)您总是需要确保对共享数据的访问受到锁(或原子锁,我会说它在技术上是硬件锁)的保护。但是我们无法解决您的问题,因为您并没有真正向我们展示导致它的原因,只是启动它的几行代码。 message 是什么,上下文是什么,你的代码是什么? 可能是operator&lt;&lt;(ostream &amp;, whatever type message is) 不能重入。取决于message 的类型以及您对其插入运算符的实现(如果它是自定义类型)。 【参考方案1】:

这应该是因为 stringstream::operator

【讨论】:

以上是关于stringstream 运算符<< 崩溃 (malloc_consolidate )的主要内容,如果未能解决你的问题,请参考以下文章

stringstream用法

stringstream用法

stringstream使用小结

stringstream使用案例

将 std::string 转换回使用 std::stringstream << cv::Mat 生成的 cv::Mat

stringstream常见用法介绍