c - free() 是否遵循指针?

标签 c pointers struct malloc free

我敢肯定它没有,但也许其中有黑魔法,所以这是我的问题:

如果我有这样的结构:

struct mystr {
    char * strp,
    unsigned int foo,
};

我为它分配了内存,想稍后释放它。我必须做吗

free(mystr_var->strp);
free(mystr_var);

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

最佳答案

不,free 不遵循指针,您需要这两行。

我通常写这样的函数:

void freemystr(mystr *mystr_var)
{
    if (mystr_var)
    {
        free(mystr_var->strp);
        mystr_var->strp = NULL;
        free(mystr_var);
    }
}

关于c - free() 是否遵循指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877546/

相关文章:

c++ - 需要使用 Makefile 编译包含 C++ 和 C 代码的程序

c++ fscanf %c 无法正常工作

C++:结构访问速度比基本变量慢?

c - 动态数据结构

c - 在 C 中实现 FIFO 队列

c - C 中的作用域规则

c - 在C中求5个连续整数的乘积

c++ - 使用链接列表复制 Ctor

c++ - 在 C++ 中转换函数指针的奇怪行为

arrays - 如何在不知道c中大小的情况下遍历数组