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++應用程序時遇到困難,因爲大多數時候錯誤消息並不意味着對我有用。如果錯誤是例如一個沒有任何詳細錯誤信息的分段錯誤。 – TorbenJ
@TorbenJonas有很多不同的方法可以調試這類問題。分析故障發生點(核心文件的驗屍調試)是一種方法。就我個人而言,我不會使用通過傳遞裸指針實現所有權轉讓的C++庫,除非我別無選擇。在這個特殊情況下,我通過代碼檢查發現了這種情況 - 我看到代碼通過一個裸指針傳遞給它擁有的一個對象,並且知道這是可能的罪魁禍首。 (如果您應該這樣做,該功能可能需要參考。) –