gpt4 book ai didi

c - 链表删除函数中,删除节点是否需要使用free?

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:11 27 4
gpt4 key购买 nike

我看到了this节点删除功能并将其与我的书进行比较。它(几乎)完全不同,我猜后者对学习问题很有用......?但是后来我不明白为什么 free 即使只需要向前移动指针就可以使用。也许我遗漏了什么。

作为引用,这是我的书的删除节点功能:

char delete(ListNodePtr *sPtr, char value){
if(value == (*sPtr)->data){
ListNodePtr tempPtr = *sPtr;
*sPtr = (*sPtr)->nextPtr;
free(tempPtr);
return value;
}
else{
ListNodePtr previousPtr = *sPtr;
ListNodePtr currentPtr = (*sPtr)->nextPtr;

while(currentPtr != NULL && currentPtr->data != value){
previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;
}

if(currentPtr != NULL){
ListNodePtr tempPtr = currentPtr;
previousPtr->nextPtr = currentPtr->nextPtr;
free(tempPtr);
return value;
}
}

return '\0';
}

我还尝试完全删除临时变量和自由调用,并且函数仍然(显然)有效,因为打印函数不打印“已删除”值。

一直在检查链接列表上的其他来源,其中许多显示了 free 函数的用法,很奇怪。

最佳答案

Linus 描述了在 Linux 内核中使用的列表。一件有趣的事情是那些是侵入式列表,这意味着列表管理代码负责释放节点,因为列表不拥有它们。

此外,该网站上的代码并不是删除节点的完整功能,而只是取消链接的代码。

不过,您自己的列表可能是一个拥有列表,使用 malloc()-ed 内存,对吧?

关于c - 链表删除函数中,删除节点是否需要使用free?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57988549/

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