在函数中释放解除引用的堆分配块

时间:2013-11-18 11:29:54

标签: c memory-management memory-leaks struct free

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

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,我只释放堆栈分配的结构。并且在返回声明之后免费调用没有多大意义......

有什么想法吗?

1 个答案:

答案 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); }