在 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 本身不会释放它指向的其他 structs,所以如果你想 free struct 连同它的尾巴,你需要写一个循环。

最后,当您 free 程序中的某个指针指向内存时,最好将 NULL 分配给您 free 的指针以避免访问释放内存时的意外 double-freeing 和未定义行为。