节俭:"->"运营商给我一个分段错误

Thrift: "->" operator giving me a segmentation fault

本文关键字:一个 错误 分段 gt 运营商 节俭      更新时间:2023-10-16

EDIT:juan.facorro向我指出了真正的问题,即当服务器不运行时,mytransport->open()会调用TSocket.cpp中的GlobalOutput.perror("error code")。但在我的代码中,mytransport->open()是在GlobalOutput初始化之前调用的

查看此链接了解更多信息


我有一个叫mytransportshared_ptr,我这样声明:

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)。然而,当我将代码放入库中的类(主类使用)时,就会出现分段错误。所以这可能是某种范围问题?

基于堆栈跟踪,在对TSocket.cpp的代码进行了一些研究之后,第182行显示了关于openConnection()方法的完全相同的错误消息。CCD_ 13从具有值CCD_ 15的CCD_。据此,该值对应于ECONNREFUSED。所以我会检查另一端的连接。

相关文章: