se-6ren">
gpt4 book ai didi

c - free( ) 导致 malloc_error_break

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:24 25 4
gpt4 key购买 nike

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;
}

谁能帮帮我?谢谢。

最佳答案

您可能 free() 缓冲区两次。

为了避免这种情况,通过在 free()ed 指向的内存之后分配 NULL 来标记 free()ed 指针到。

free(tcp->sendbuf);
tcp->sendbuf = NULL;

使用此指针对 free() 的任何后续调用都不会执行任何操作,因为将 NULL 传递给 free() 是无害的。

对于任何已传递给 free() 的指针,这样做是一种很好的做法。

关于c - free( ) 导致 malloc_error_break,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com