将动态分配的内存释放到我正确创建的结构

时间:2019-04-22 14:36:47

标签: c free dynamic-memory-allocation

在我的作业中,我使用的是我自己创建的结构。问题是,何时释放分配的内存,我是否应该首先释放它的struct字段就足以调用free(ptrToStruct)?

struct Prof{
    char* first_name;
    char* second_name;
    char** trained_classes; 
    int count_of_assigned_classes;
    int max_classes_to_take;
    int count_of_trained_classes;
    int assigned_to_untrained;
};

2 个答案:

答案 0 :(得分:1)

不。如果在结构中有指向堆分配的内存的指针,则应首先释放它们。原因是结构内的指针指向的区域位于堆的其他部分。释放指向结构本身的指针只会释放结构的内存区域,而不会释放结构内部的指针指向的关联内存区域。

答案 1 :(得分:0)

您需要free()(由先前的malloc() calloc()realloc()调用返回的每个指针(即,指针指向的已分配内存)。换句话说,分配器函数返回的每个指针都必须传递给free()

此外,一旦传递到free(),就不应该再访问内存位置,free()的方式将是首先释放内部成员(需要访问结构指针,例如ptrToStruct->first_name),然后是指向结构本身的指针(ptrToStruct)。