我有以下结构
typedef struct {
int id;
double c[2];
double p[4][2];
} Detection;
这是它的构造函数
Detection* create_detection(int i) {
Detection* detection = (Detection*) malloc(sizeof(Detection));
detection->id = i;
return detection;
}
如您所见,结构本身是动态分配的。我正在尝试为它编写一个析构函数,这就是我目前所拥有的。
void destroy_detection(Detection* detection) {
free(detection);
}
c
和 p
也会免费吗?
最佳答案
这里只有一个分配。 c
和 p
字段没有单独分配。一般规则是每次对 malloc
的调用都必须通过对 free
的调用进行一对一的平衡。所需要的就是所写的析构函数。如果结构内有其他动态分配的指针,则可能需要额外的 free
调用。
请注意,c
和p
字段具有固定大小,包含在sizeof(Detection)
中。在 C++ 中,字段可以有自己的构造函数,可以进行动态分配,但它们通常也会从编译器在父析构函数中生成的代码中自动析构。
C 有可变长度数组 (VLA),但它们不能在结构中声明,只能在函数参数列表或函数内部的 block 中声明。
关于c - 非动态数组何时在结构中释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513835/