我正在编写一个服务器程序,它有一个功能,可以将一个结构打包成一个协议限制结构。函数如下所示:

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,则只释放堆栈分配的结构。在return语句之后调用free没有多大意义。。。
有什么想法吗?

最佳答案

您可以通过指针将第二个参数作为指向lpacket的指针传递给函数,如下所示,并在调用此函数之前将大小为pck->size的内存分配给lpck,并在此函数成功返回后释放memroy。
void pack_interp_ilpacket(ilpacket* pck,lpacket* lpck) { pack_lpack_data(pck->size, pck->msgtype, pck->following, lpck); }

10-04 20:23