c - 删除整个链表

标签 c list pointers memory linked-list

我正在使用链表并填充结构,但是当我删除整个结构并尝试打印链表的内容(应该为空)时,会出现一个数字列表。我知道这可能是内存问题。有关如何修复它的任何建议?

删除整个链表的代码:

void destroy(set_elem *head)
{
    set_elem *current = head;
    set_elem *next;

    while (current != NULL)
    {
       next = current->next;
       free(current);
       current = next;
    }
    head = NULL;
}

最佳答案

虽然您的删除功能正常工作,但当您执行 head = NULL; 时,它不会将调用者的头部设置为 NULL。因为您只是在修改本地指针,这会导致您稍后尝试通过检查 head 的值来打印值的逻辑。 .

要修改原始指针,请将指针传递给 head并设置 *head=NULL;

void destroy(set_elem **head)
{
set_elem *current = *head;

/* rest is the same */

*head = NULL;
}

关于c - 删除整个链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471482/

相关文章:

css - 使用 CSS 的水平嵌套列表

c - 一段 C 代码,可能对内存有影响

c++ - 在循环中创建新的指针对象

python - 如何使用 SWIG 包装 HWND 和 HINSTANCE 类型?

Javascript-嵌套列表不会展开

list - 用于重新排序列表项的用户界面

c++ - 在 Widget 之间传输 std::unique_ptr

c - 释放结构内的内存时程序崩溃

mysql - C语言中mysql连接丢失

c函数反转字符串