【发布时间】:2021-09-13 18:05:52
【问题描述】:
我知道指向malloc-ed 数据的指针需要在适当的地方释放。
例如:
Item* items = (Item*)malloc(sizeof(Item) * 1);
^ 完成后,我必须释放它。有道理。
但是,请考虑以下结构:
typedef struct Items {
Vector* fruits;
} Items;
Vector 在哪里:
typedef struct Vector {
void** data;
int size;
} Vector;
假设我已经为Items 结构分配了内存,并且Vector 成员包含例如3 个项目(另一个结构Boxes)。
如果我有一个 Boxes 指针变量引用 Items 结构中 Vector 的 第二个成员,使用后是否需要释放它?
// Does `box1` need to be explicitly freed?
Boxes* box1 = items->fruits[1]; // `items` is of type `Items`
我了解该变量 box1 没有显式堆分配。 只有堆分配的指针需要被释放吗?
【问题讨论】:
-
你没有释放指针,你释放了分配。
-
没有。你需要释放你分配的东西(例如盒子数组),尝试释放一个盒子是不正确的。
-
如果这个问题是关于 C++ 的,那么答案就是 RAII。如果这个问题是关于 C 的,那么删除 C++ 标签
-
只发布你拥有的东西。如果您不知道它来自哪里,或者它是如何分配的,请不要用它
。 -
鉴于
malloc和typedef struct和(在较小程度上)void*,我将假设这是 C 代码和 C++ 答案,例如“不要使用原始指针”请勿应用。删除 [c++] 标签。