我有以下用于实现优先级队列的结构
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);
答案 0 :(得分:3)
您需要将指针传递给free
,因此free(cur)
是可行的方式,假设struct
本身已使用malloc
/ {{1 }} / calloc
。具体来说,如果您在自动内存中(即在堆栈中)分配了realloc
,则不应该在其上调用curr
。
看起来free
是链接列表的一部分。释放q_element
本身不会释放其指向的其他struct
,因此如果您想struct
free
及其尾部,则需要编写一个循环。
最后,当程序中的某个指针指向struct
内存时,将free
指定给NULL
以避免意外双重的指针是一个非常好的主意。 - 访问释放内存时的自由和未定义行为。