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()는 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 함수에서 반환 된 주소에 대해서는 free를 호출 할 수 있습니다. –
'tcp-> sendbuf'가 참조하는 메모리를 할당하는 방법을 보여주세요! – Oswald
디버그 메시지에서 '포인터가 해제되었습니다. 할당되지 않았습니다.'라는 메시지가 나타납니다. 아마도'malloc' 패밀리 함수를 사용하여 할당되지 않은 메모리 바이트를'free'하려고 시도했을 것입니다. 나는'tcp-> sendbuf'가 스택상의 메모리 영역이나 이전에 릴리즈 된 메모리 영역을 가리킨다 고 추측한다. – sgnsajgon