我有以下代码,其中包含一个名为FromString的模板,该模板接受一个字符串并将其转换为第二个参数的类型:
#include <iostream>
#include <sstream>
using namespace std;
template<typename Type_t>
inline Type_t FromString(const string& S, Type_t& T)
{
istringstream sin(S);
sin>>T;
return T;
}
int main () {
string words = "52";
int number = 0;
FromString(words, number);
cout << number << endl;
return 0;
}
这段代码可以在我的PC和服务器上运行。
当我尝试在更大的代码中使用此模板时,它在我的个人PC上工作正常但是当我在服务器上编译并运行它时,FromString的一些实例工作而其他实例导致以下错误:
Bus error (core dumped)
我试着查看两个参数S和T的类型,但是当出现错误时它们看起来并不正常。
您建议我采取哪些步骤来确定问题的根源?
不确定这是否重要,但我的电脑上有gcc version 5.4.0
,服务器上有gcc version 4.8.5
。
感谢您的帮助,
gdb debuger给了我以下输出:
Program received signal SIGBUS, Bus error.
basic_istringstream (__mode=std::_S_in, __str="mystring", this=0x7fffffff8a50, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /usr/include/c++/4.8.2/sstream:328
328 : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in)
我设法将其缩小到istringstream
(gdb) print __str
$7 = "mystring"
(gdb) print this
$8 = (std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> > * const) 0x7fffffff8a50
但是输入字符串似乎是正确的,