void close_TCP_connection(TCP_Connection *tcp)
{
if (tcp)
{
printf(" CHIUSURA %s\n", tcp->sendbuf);
if (tcp->sockfd)
{
socketDestroy(tcp->sockfd);
}
if (tcp->recvbuf)
{
free(tcp->recvbuf);
} //fi
if (tcp->sendbuf)
{
printf(" CHIUSURA 2%s\n", tcp->sendbuf);
free(tcp->sendbuf);
} //fi
if (tcp->addr)
{
free(tcp->addr);
} //fi
} //fi
}
私はこの機能を非常に素晴らしいプロジェクトに挿入しました。この関数の目的は、構造体 TCP_connection のすべてのメンバーを解放することです。この構造体には、接続クライアント サーバーに関するすべての情報が含まれています。
プログラムを起動すると、 にエラーが表示されますfree(tcp->sendbuf);
。printf
この行では正しく動作します。コードをデバッグするときに発生するエラーは次のとおりです。
215 free(tcp->sendbuf);
(gdb)
charms_client(49045) malloc: *** error for object 0x10006ec80: pointer being freed was
not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal SIGABRT, Aborted.
0x00007fff8ccddd46 in __kill ()enter code here
構造体を別の関数に割り当てます
int init_TCPConnection(TCP_Connection *tcp, char *servername, int server_port, int client_port)
{
tcp->sendbuf = (char *) malloc( sizeof(char) * MAX_BUF_LEN);
tcp->sendlen = (size_t)MAX_BUF_LEN;
}
誰でも私を助けることができますか?ありがとう。