gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:57 24 4
gpt4 key购买 nike

所以我尝试使用这个函数来删除 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.: 然而,这并不能保证在函数结束时 head 将为 NULL。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com