在 C 中是否以这种方式释放结构?
Does the struct get freed this way in C?
我有以下用于实现优先级队列的结构
struct q_element
{
//Declaration of struct members
int element;
int priority;
struct q_element *next_element;
};
并且我使用指向结构的指针 'cur' 从队列中的第一项开始
struct q_element* cur = start_element;
继续移动,直到找到我要从列表中删除的那个。
while (cur->priority!=max_priority)
cur = cur->next_element;
下面这行代码真的释放了结构体吗?因为 'cur' 是指向结构的指针,所以我不完全确定。
free(cur);
您需要传递一个指向 free
的指针,因此 free(cur)
是可行的方法,假设 struct
本身已使用 malloc
/[ 分配=14=]/realloc
。具体来说,如果您将 curr
分配到自动内存中(即在堆栈上),则不应在其上调用 free
。
看起来 q_element
是链表的一部分。释放 struct
本身不会释放它指向的其他 struct
s,所以如果你想 free
struct
连同它的尾巴,你需要写一个循环。
最后,当您 free
程序中的某个指针指向内存时,最好将 NULL
分配给您 free
的指针以避免访问释放内存时的意外 double-freeing 和未定义行为。
我有以下用于实现优先级队列的结构
struct q_element
{
//Declaration of struct members
int element;
int priority;
struct q_element *next_element;
};
并且我使用指向结构的指针 'cur' 从队列中的第一项开始
struct q_element* cur = start_element;
继续移动,直到找到我要从列表中删除的那个。
while (cur->priority!=max_priority)
cur = cur->next_element;
下面这行代码真的释放了结构体吗?因为 'cur' 是指向结构的指针,所以我不完全确定。
free(cur);
您需要传递一个指向 free
的指针,因此 free(cur)
是可行的方法,假设 struct
本身已使用 malloc
/[ 分配=14=]/realloc
。具体来说,如果您将 curr
分配到自动内存中(即在堆栈上),则不应在其上调用 free
。
看起来 q_element
是链表的一部分。释放 struct
本身不会释放它指向的其他 struct
s,所以如果你想 free
struct
连同它的尾巴,你需要写一个循环。
最后,当您 free
程序中的某个指针指向内存时,最好将 NULL
分配给您 free
的指针以避免访问释放内存时的意外 double-freeing 和未定义行为。