结构是否以这种方式在C中释放?

时间:2015-03-15 02:23:59

标签: c pointers struct free

我有以下用于实现优先级队列的结构

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);

1 个答案:

答案 0 :(得分:3)

您需要将指针传递给free,因此free(cur)是可行的方式,假设struct本身已使用malloc / {{1 }} / calloc。具体来说,如果您在自动内存中(即在堆栈中)分配了realloc,则不应该在其上调用curr

看起来free是链接列表的一部分。释放q_element本身不会释放其指向的其他struct,因此如果您想struct free及其尾部,则需要编写一个循环。

最后,当程序中的某个指针指向struct内存时,将free指定给NULL以避免意外双重的指针是一个非常好的主意。 - 访问释放内存时的自由和未定义行为。