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