0
私はPoco
で遊んでいて、簡単なTCP
サーバクライアントアプリケーションを構築しようとしています。
この例ではClient
の唯一のタスクは、すべての受信データを送信者にエコーバックすることです。
私がコンパイルされたアプリケーションを実行すると終了時に、私は、次のメッセージが表示されます:シンプルなPoco TCPネットワーキングアプリケーションのコアダンプ
*** Error in `./gameserver': free(): invalid pointer: 0x00007ffd4896cbf8 ***
Aborted (core dumped)
私は本当にここでの問題を理解していません。私はそれがPoco
コードの一部と関係があると思います。私はPoco
のものを使用するときに重要な何かを見逃しています。
誰かが私のコードで何が間違っているか教えていただけたらいいですか?
コード:
class Client : public TCPServerConnection
{
public:
explicit Client(const StreamSocket &socket)
: TCPServerConnection(socket)
{
}
~Client()
{
socket().close();
}
void run()
{
char buffer[256];
int n = socket().receiveBytes(buffer, 256);
while(n > 0)
{
socket().sendBytes(buffer, n);
n = socket().receiveBytes(buffer, 256);
}
}
};
class Factory : public TCPServerConnectionFactory
{
public:
TCPServerConnection* createConnection(const StreamSocket &socket)
{
return new Client(socket);
}
};
class Server
{
public:
explicit Server(const string &endpoint)
: address(endpoint), socket(address), factory(), server(&factory, socket)
{
server.start();
}
~Server()
{
server.stop();
}
private:
SocketAddress address;
ServerSocket socket;
TCPServer server;
Factory factory;
};
int main()
{
{
Server server("localhost:5556");
cin.get();
}
}
ありがとうございます!私はあなたがこれの原因をどのように見つけたのか知りたいですか?ソースを知っていたか、ツールを使ったことがあるので、事前に知っていましたか?ほとんどの場合、エラーメッセージは私にとって有用なものではないので、私はしばしばC++アプリケーションのデバッグに問題があります。エラーが例えば1である場合、それはさらに悪化する。詳細なエラーメッセージがまったくないセグメンテーションエラーです。 – TorbenJ
@ TorbenJonasこの種の問題をデバッグする方法はたくさんあります。障害が発生した時点(コアファイルの死後のデバッグ)の分析は1つの方法です。個人的には、選択肢がなければ、裸のポインタを渡して所有権の移譲を実装したC++ライブラリを使用しません。この特定のケースでは、私はコード検査でそれを理解しました。ライブラリ関数に所有されているオブジェクトに裸のポインタを渡し、それが原因である可能性が高いことを知っていました。 (もしあなたがそうしなければならないなら、その関数は参考になるでしょう)。 –