РЕДАКТИРАНЕ: 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 в проследяването на стека). Въпреки това, когато поставя кода в клас вътре в библиотека (която основният клас използва), тогава получавам грешката на сегментирането. Така че може да е някакъв проблем с обхвата?
mytransport
, просто като използвате условен (if(mytransport)
{ // добре е...}`. - person Chad   schedule 19.07.2013