【问题标题】:Do I need to free a variable in a struct?我需要释放结构中的变量吗?
【发布时间】:2019-09-01 15:03:00
【问题描述】:

我创建了一个结构,其中包含一个变量。该结构如下所示:

typedef struct ABC {
    int x;
} ABC;

现在我想释放整个结构,我需要先释放变量吗?

ABC *p = malloc(sizeof(ABC));
p->x = 10;

free(&x);   // Is this step needed?
free(p);
p = NULL;

【问题讨论】:

  • 这不是 C# 代码,请注意标记的内容。您的代码也无法编译。始终提供实际代码。
  • 释放您分配的内容。不要释放你没有分配的东西。您分配了内存并将指向它的指针分配给p。通过释放p 来释放内存。你没有为x单独分配内存,所以不要单独为x释放内存。

标签: c memory struct


【解决方案1】:

假设您的意思是 p->x 而不是 x...

free(&p->x);   // Is this step needed?

绝对不是。不仅不需要,而且是错误的。您不能释放不是先前分配的指针的东西。字段x 是一个整数。就那么简单。换句话说,为了能够free() 某个东西,你必须先分配它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多