c - 在C中删除整个链表,出错了

标签 c linked-list free

所以我尝试使用这个函数来删除 C 中的整个单链表。

    void zeroList( struct node *head)
    {
        struct node* tempDelete;
        struct node* current = head;

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

        }   
    }

但是我遇到了问题,因为当我尝试验证列表本身是否已被删除(通过打印它)时。我留下的东西看起来像这样:

{ 0->146513968->146513952->146513936-> NULL }
{ 146513920->146514048->146514032->146514016->146514000-> NULL }
{146513984->146514064->146514080->146514096->146514112->146514128->146514144->146514160->146514176-> NULL }

我的印象是节点不会仍然存在,或者至少它们会包含 NULL 值。谁能解释一下为什么我会得到这些奇怪的垃圾数字?

最佳答案

一旦释放了内存,它的内容就不确定了,你不应该碰它们。这与您不应将指针设置为您选择的随机值的原因相同(操作系统需要允许您访问它。)

您看到的值是垃圾,并且是预期的,因为操作系统不会将内存归零。如果您想确保内存中没有任何内容,您需要自己清除指针:

current = current->next;
tempDelete->next = NULL;

PS.:但是,这并不能保证函数结束时头部将为 NULL。

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

相关文章:

c - Ping 服务器并检查 C 程序的结果?

c - doxygen 将宏类型错误渲染为公共(public)成员函数

C++链表——析构函数实现

c - 如何修复此排序链表插入?

c - 释放导致崩溃

c - libwnck 中的内存泄漏

iphone - objective-c : a C int array in a class interface?

java - 在 Java 中创建有序队列的有效方法,其迭代器重复回到开头

c - 为全局结构中的字段赋值后释放

c - 如何释放内存并同时返回指针?