gpt4 book ai didi

无法释放链表

转载 作者:行者123 更新时间:2023-11-30 15:42:35 27 4
gpt4 key购买 nike

这是结构:

typedef struct listeEle {
int pos;
struct listeEle *next;
} ListEle;

这是我创建列表的地方:

ListEle *mokli(int n){
if(n<=0)
{
fprintf(stderr, "Falscher Parameter für mokli... Programm beendet.");
exit(0);
}
else
{
ListEle *lst;
lst = malloc(sizeof(ListEle));
lst->next = NULL;
lst->pos = 1;
int i;
ListEle *new;
ListEle *ptr;
ptr = lst;

for(i=1; i<n; i++)
{
new = NULL;
new = malloc(sizeof(ListEle));
new->next = NULL;
new->pos = i+1;
ptr->next = new;
ptr = ptr->next;
}
return lst;
}

}

这就是我尝试释放它的地方

void unmokli(ListEle *lst)
{
if(lst->next == NULL)
{
free(lst);
lst = NULL;
printList(lst);
printf("1 > Liste vollständig gelöscht.\n");
}
else
{
ListEle *head;
head = lst;

int del = 0;
while(head)
{
ListEle *temp = head;
head = head->next;
free(temp);

del+=1;
}
free(lst);
lst = NULL;

printf("2 > Liste deleted (%d).\n", del);
}

}

这就是我打印它的方式

void printList(ListEle *anfang){
if(anfang == NULL)
{
printf("List not av...\n");
}
else
{
ListEle *ptr;
ptr = anfang;
int i = 1;

while(ptr)
{
printf("Element %i -> ListeEle pos=%i\n", i++, ptr->pos);
ptr = ptr->next;
}
}

}

问题出在main方法上。我在此处创建的列表不会被释放,尽管我将其正确传递给了释放函数。

int main(void){

ListEle *liste;
liste = mokli(6);

printList(liste);
unmokli(liste);

printList(liste);

return 0;
}

unmokli 之后它应该被完全释放,但是 main 函数内的列表仍然被分配。我怎样才能完全释放列表?

最佳答案

当你这样做时

lst = NULL;

在函数 unmokli 中,您仅制作本地副本 lst NULL。请记住,参数是按值传递的,即它们是被复制的。您需要通过引用传递lst,这可以通过传递指针(到指针)来完成:

void unmokli(ListEle **lst)
{
...
*lst = NULL;
...
}

然后您可以使用地址运算符来调用它:

unmokli(&liste);

关于无法释放链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098213/

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