假设我有一个实现向量的 C 结构体如下所示:
```c struct Vector { int x; int y; }; ```
```c struct Vector { int x; int y; }; ```
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
就足够了?
malloc(sizeof(struct cvector) + (sizeof(int) * 8));
这部分让我有点困惑。编译器如何知道要为哪些结构成员分配内存?例如,当我有一个具有多个 int 数组的结构体,并且我想使用您上面介绍的方法时会发生什么? - szenadammystruct
的结构体,其中包含成员...; int data1[]; int data2[]; int data3[];
,只要这三个成员是结构体成员中最后的三个,我就可以执行malloc(sizeof(mystruct) + (sizeof(int)*10) + (sizeof(int)*10) + (sizeof(int)*10))
吗? - szenadamstruct
只能有一个柔性数组成员。 - David Ranieri