【发布时间】:2011-05-12 09:46:54
【问题描述】:
真的不知道该怎么做——当我为一个字符串分配内存时,我的程序不断崩溃,最常见的是在这段无害的代码中,而在其他情况下这从来没有引起过问题:
template <class T>
inline string to_string (const T& t, bool use_fixed = false)
{
stringstream ss;
if (use_fixed) ss.setf(ios::fixed, ios::floatfield);
ss << t;
return ss.str();
}
特别是它在'ss
0 ??
1 malloc
2 operator new(unsigned int)
3 std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&)
4 std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int)
5 std::string::reserve(unsigned int)
6 std::basic_stringbuf<char, std::char_traits<char>, std:allocator<char> >::overflow(int)
...
现在我能想到的唯一可能与我的程序不同的事情是它有多个线程,并启动一个具有多个线程的子进程并调用此函数。我在 Ubuntu 10.04 上。感谢您的考虑--
马特
【问题讨论】:
-
您可以发布完整的堆栈跟踪吗?如果没有更多的上下文,很难说发生了什么。所涉及的错误也完全有可能与它表现出来的代码无关。我的猜测是某处的数组边界溢出。你可以尝试在 Valgrind 或 DUMA 中运行你的程序,看看你想出了什么。
-
不幸的是,在我的声誉 >= 10 并且我可以发布屏幕截图之前,完整的堆栈跟踪是不可行的。 :) 我以前从未使用过 valgrind,我会看看的。
-
你知道发生了什么吗?
-
@highBandWidth 不,我认为随着我进行其他更改,问题会自行消失。但是对于 C++11 和
std::to_string,这个问题现在已经没有实际意义了。
标签: c++ string malloc new-operator