free()跟随指针吗?

mus*_*tze 6 c malloc free struct pointers

我确定它没有,但也许它里面有黑魔法,所以这是我的问题:

如果我有这样的结构:

struct mystr {
    char * strp,
    unsigned int foo,
};
Run Code Online (Sandbox Code Playgroud)

我为它分配内存,并希望稍后发布.我该做什么

free(mystr_var->strp);
free(mystr_var);
Run Code Online (Sandbox Code Playgroud)

或者是最后一行,free()函数是否遵循指针并释放它们两个?

jim*_*ark 5

不,免费不遵循指针,你需要两条线.

我经常写一个函数,如:

void freemystr(mystr *mystr_var)
{
    if (mystr_var)
    {
        free(mystr_var->strp);
        mystr_var->strp = NULL;
        free(mystr_var);
    }
}
Run Code Online (Sandbox Code Playgroud)


ask*_*ish 4

每个单独分配的内存块都必须单独释放。free()只会释放指针指向的内存块,并且不知道该内存的内容是什么。

因此,在您的情况下,您正在以正确的方式执行此操作,首先释放结构中分配的最内层内存,最后释放结构指针。

如果您只是对结构指针进行 free,那么结构内存就会被释放。所持有的内存char* strp会成为程序生命周期中的内存泄漏。