c - 非动态数组何时在结构中释放

标签 c memory-management struct malloc free

我有以下结构

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);
}

cp 也会免费吗?

最佳答案

这里只有一个分配。 cp 字段没有单独分配。一般规则是每次对 malloc 的调用都必须通过对 free 的调用进行一对一的平衡。所需要的就是所写的析构函数。如果结构内有其他动态分配的指针,则可能需要额外的 free 调用。

请注意,cp 字段具有固定大小,包含在sizeof(Detection) 中。在 C++ 中,字段可以有自己的构造函数,可以进行动态分配,但它们通常也会从编译器在父析构函数中生成的代码中自动析构。

C 有可变长度数组 (VLA),但它们不能在结构中声明,只能在函数参数列表或函数内部的 block 中声明。

关于c - 非动态数组何时在结构中释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513835/

相关文章:

使用 V4L2 捕获网络摄像头流失败

iphone - MutableCopy AllocLeak 内存泄漏

c - 需要帮助来理解 C 中的结构

c++ - 在 C++ 中删除时间数组

c++ - 删除 NULL 指针是否安全?

ios - 计算嵌套在另一个结构中的结构数?

python - 使用 SWIG 在 Python 中访问结构

c - 将 FILE* 结构映射到缓冲区?

c - C 中未知的类型名称?

c - 什么是左值和右值?