我正在编写一个服务器程序,它具有将结构打包到协议限制结构的功能。该函数如下所示:
lpacket pack_interp_ilpacket(ilpacket* pck)
{
lpacket* a = malloc(pck->size);
pack_lpack_data(pck->size, pck->msgtype, pck->following, a);
return *a;
}
现在的问题是,当我在lpacket上调用malloc并取消引用它以使其返回一个值(而不是引用)时,我不再能够释放该内存。如果我在返回值的地方调用free,我只释放堆栈分配的结构。并且在返回声明之后免费调用没有多大意义......
有什么想法吗?
答案 0 :(得分:1)
您可以通过指针将第二个参数传递给函数作为指向lpacket的指针,如下所示,并在调用此函数之前将大小为pck-> size的内存分配给lpck,并在此函数成功返回后释放memroy。
void pack_interp_ilpacket(ilpacket* pck,lpacket* lpck)
{
pack_lpack_data(pck->size, pck->msgtype, pck->following, lpck);
}