将动态分配的内存释放到我正确创建的struct [duplicate]

问题描述 投票:0回答:2

在我的任务中,我使用的是我自己创建的结构。问题是,当释放分配的内存时,我首先要释放它的结构字段就足以调用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;
};
c free dynamic-memory-allocation
2个回答
1
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.