我对C结构和数据类型有疑问。我有一个名为test
的结构:
struct test
{
char* c;
char* c2;
};
我从一个函数返回这个结构:
struct test a()
{
struct test t = { "yeah!", "string" };
return t;
}
我的问题是结构的内存是自动释放还是我必须通过free()
手动执行此操作。
[更新from comment:]
函数a在DLL中,我想在主程序中使用struct。
答案 0 :(得分:5)
您应该free
首先malloc
编辑(或使用其他类似功能)的内容。由于没有malloc
编辑,因此不应该free
d。
答案 1 :(得分:3)
TL / DR版本:您无需手动free
任何内容;您可以按照处理任何标量变量的方式处理此结构实例。
稍长版本:结构实例t
具有自动存储持续时间,这意味着它的生命周期延长了a
函数的生命周期;一旦a
退出,就会释放为t
分配的所有内存。 t
内容的副本将返回给调用者。
至于那些内容......
c
和c2
指向字符串文字;分配字符串文字,使其生命周期延伸到整个程序的执行。因此,从c
返回c2
后,t
和a
中的指针值有效;实际上,那些指针值在程序的生命周期内都是有效的。
您只需要对通过free
,malloc
或calloc
分配的内容致电realloc
。
答案 2 :(得分:0)
您不必释放非动态分配。然而,如果你想在另一个函数中使用struct,你必须传递struct的地址,并将它作为(struct *),如果你不这样做,你将无法再次使用它。