在我的作业中,我使用的是我自己创建的结构。问题是,何时释放分配的内存,我是否应该首先释放它的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;
};
答案 0 :(得分:1)
不。如果在结构中有指向堆分配的内存的指针,则应首先释放它们。原因是结构内的指针指向的区域位于堆的其他部分。释放指向结构本身的指针只会释放结构的内存区域,而不会释放结构内部的指针指向的关联内存区域。
答案 1 :(得分:0)
您需要free()
(由先前的malloc()
calloc()
或realloc()
调用返回的每个指针(即,指针指向的已分配内存)。换句话说,分配器函数返回的每个指针都必须传递给free()
。
此外,一旦传递到free()
,就不应该再访问内存位置,free()
的方式将是首先释放内部成员(需要访问结构指针,例如ptrToStruct->first_name
),然后是指向结构本身的指针(ptrToStruct
)。