什么时候C会释放struct的内存

时间:2016-05-16 14:49:41

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

我对C结构和数据类型有疑问。我有一个名为test的结构:

struct test
{
    char* c;
    char* c2;
};

我从一个函数返回这个结构:

struct test a()
{
    struct test t = { "yeah!", "string" };
    return t;
}

我的问题是结构的内存是自动释放还是我必须通过free()手动执行此操作。

[更新from comment:]

函数a在DLL中,我想在主程序中使用struct。

3 个答案:

答案 0 :(得分:5)

您应该free首先malloc编辑(或使用其他类似功能)的内容。由于没有malloc编辑,因此不应该free d。

答案 1 :(得分:3)

TL / DR版本:您无需手动free任何内容;您可以按照处理任何标量变量的方式处理此结构实例。

稍长版本:结构实例t具有自动存储持续时间,这意味着它的生命周期延长了a函数的生命周期;一旦a退出,就会释放为t分配的所有内存。 t内容的副本将返回给调用者。

至于那些内容......

cc2指向字符串文字;分配字符串文字,使其生命周期延伸到整个程序的执行。因此,从c返回c2后,ta中的指针值有效;实际上,那些指针值在程序的生命周期内都是有效的。

您只需要对通过freemalloccalloc分配的内容致电realloc

答案 2 :(得分:0)

您不必释放非动态分配。然而,如果你想在另一个函数中使用struct,你必须传递struct的地址,并将它作为(struct *),如果你不这样做,你将无法再次使用它。