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的所有成員。該結構包含有關連接客戶機 - 服務器的所有信息。免費()導致malloc_error_break
當我啓動該程序時,我觀察到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;
}
誰能幫助我?謝謝。
您可以免費撥打從malloc/calloc函數返回的地址。 –
向我們展示如何分配'tcp-> sendbuf'引用的內存! – Oswald
在調試消息中你有一個問題的答案:'釋放的指針未被分配'。可能你嘗試使用'malloc'系列函數來分配'free'內存字節。我猜'tcp-> sendbuf'指向堆棧上的內存區域,或指向之前釋放的內存區域。 – sgnsajgon