删除C中的整个链表,出错了

时间:2013-11-24 01:35:30

标签: 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值。谁能解释为什么我得到这些奇怪的垃圾数字?

1 个答案:

答案 0 :(得分:2)

一旦你释放了内存,它的内容是未定义的,你不应该触摸它们。这就是为什么你不应该设置一个指向你选择的随机值的指针的原因(操作系统需要允许你访问它。)

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

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

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