假设我有一个在C中实现向量的struct,如下所示:
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;然后我创建了这样的向量:
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就足够了?
发布于 2018-11-29 08:01:06
是的,您需要free也是vector->data,规则是:每次调用malloc都调用一次free
如果您在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位于同一个块上。
https://stackoverflow.com/questions/53534077
复制相似问题