编辑: juan.facorro 指出了真正的问题,即当服务器未运行时,mytransport->open()
调用GlobalOutput.perror("error code")
TSocket.cpp。但是在我的代码中,在被初始化mytransport->open()
之前被调用GlobalOutput
有关更多信息,请参阅此链接
我有一个shared_ptr
被调用mytransport
的,我这样声明它:
shared_ptr<TTransport> mytransport(new TBufferedTransport(socket));
但是当我打电话时,mytransport->open();
我遇到了分段错误,并且堆栈跟踪的顶部说:
#0 0x00000000 in ?? ()
#1 0x08068281 in apache::thrift::TOutput::perror (this=0x807a44c, message=0x9dc0e14 "TSocket::open() connect() <Host: localhost Port: 9090>", errno_copy=111) at src/thrift/Thrift.cpp:65
#2 0x080670eb in perror (errno_copy=<optimized out>, message=..., this=<optimized out>) at ./src/thrift/Thrift.h:123
#3 apache::thrift::transport::TSocket::openConnection (this=0xbfe69ea0, res=0xbfe69e9c) at src/thrift/transport/TSocket.cpp:277
我不太了解“->”运算符,但它似乎mytransport
指向一个NULL
对象。有任何想法吗?
编辑:如果我将代码放入主类,它会正常运行并给出我想要的错误:
TSocket::open() connect() <Host: localhost Port: 9090>Connection refused
(参见堆栈跟踪中的#1)。但是,当我将代码放入库中的类(主类使用)中时,就会出现分段错误。所以这可能是某种范围问题?