调试导致总线错误的模板(核心转储)

时间:2017-09-21 21:06:27

标签: c++ templates

我有以下代码,其中包含一个名为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)

[编辑2]

我设法将其缩小到istringstream

的问题
(gdb) print __str
$7 = "mystring"
(gdb) print this
$8 = (std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> > * const) 0x7fffffff8a50

但是输入字符串似乎是正确的,

0 个答案:

没有答案