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

Luc*_*weg 6 c dll struct memory-leaks memory-management

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

struct test
{
    char* c;
    char* c2;
};
Run Code Online (Sandbox Code Playgroud)

我从函数返回这个结构:

struct test a()
{
    struct test t = { "yeah!", "string" };
    return t;
}
Run Code Online (Sandbox Code Playgroud)

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

[ 评论更新:]

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

Ser*_*eyA 5

你应该只是free你先malloc编辑(或使用其他类似功能)的东西.既然什么都没有malloc,那就什么都不应该free.


Joh*_*ode 3

TL/DR 版本:您不需要手动执行free任何操作;您可以像处理任何标量变量一样处理此结构实例。

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

至于那些内容……

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

您应该只需要调用通过、或free分配的内容。 malloccallocrealloc