EDIT:juan.facorroは、サーバーが実行されていないときにTSocket.cppをmytransport->open()
呼び出すという本当の問題を指摘しましGlobalOutput.perror("error code")
た。しかし、私のコードでは、初期化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 を参照)。ただし、(メイン クラスが使用する) ライブラリ内のクラスにコードを配置すると、セグメンテーション違反が発生します。それで、それはある種の範囲の問題かもしれませんか?