假设我有一个 struct
用于在 C 中实现 vector ,如下所示:
struct cvector {
unsigned int size; // indicates number of element in the vector
unsigned int capacity; // indicates length of the array
int* data; // array to store the actual data
};
typedef struct cvector* cvector;
然后我像这样创建这个 vector :
cvector cvector_create() {
cvector retval = (cvector)malloc(sizeof(struct cvector));
retval->capacity = 8;
retval->size = 0;
retval->data = (int*)malloc(retval->capacity * sizeof(int));
return retval;
}
我使用 malloc
为结构分配内存和为内部 int
数组分配内存。
为了释放我的 cvector
我使用这个:
void cvector_free(cvector vector) {
free(vector);
}
我的问题是,我是否需要像这样单独释放内部 int
数组:free(vector->data)
还是只释放 struct
就够了吗?
最佳答案
是的,您还需要 free
vector->data
,规则是:每次调用 一次调用
free
>malloc
如果你在C99下,你可以使用灵活的数组成员:
struct cvector {
unsigned int size; // indicates number of element in the vector
unsigned int capacity; // indicates length of the array
int data[]; // array to store the actual data
};
注意 int data[];
必须是 struct
的最后一个成员。
然后,您以这种方式预留空间:
cvector cvector_create() {
cvector retval = malloc(sizeof(struct cvector) + (sizeof(int) * 8));
retval->capacity = 8;
retval->size = 0;
return retval;
}
现在,调用 free(vector)
就足够了,因为 vector
和 vector->data
在同一个 block 上。
关于c - 释放使用 malloc 创建的结构,其成员也有一个 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53534077/