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

C 将动态分配的内存释放到我正确创建的结构,c,free,dynamic-memory-allocation,C,Free,Dynamic Memory Allocation,在我的作业中,我使用自己创建的结构。问题是当释放分配的内存时,我应该首先释放struct的字段吗?它是否足以调用free(ptrToStruct) 您需要free()以前的malloc()calloc()或realloc()调用返回的每个指针(即指针指向的已分配内存)。换句话说,分配器函数返回的每个指针都需要传递到free() 此外,一旦传递到free(),内存位置就不应该再被访问了,free()的方法是首先释放内部成员(需要访问结构指针,如ptrToStruct->first_name),然后

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

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


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

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

这就是为什么在大多数C程序中,每个结构都有
create
release
方法的原因。这样,分配和解除分配代码就存在于一个地方
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;
};