gpt4 book ai didi

c - 释放链接列表

转载 作者:行者123 更新时间:2023-11-30 18:30:09 25 4
gpt4 key购买 nike

我在正确释放链接列表时遇到问题。我真的不知道,如何用头部和电流来制作它......

typedef struct list{
int info;
struct list *link;
} Node;

Node *_getnode (){
return((Node *) malloc (sizeof (Node)));
}

int main() {

Node *s = _getnode();
s -> link = NULL;
Node *t = s;
int c;

while (1) {
printf("\n\t Enter number : ");
scanf ("%d", &s -> info);

printf ("\n\t Continue? ");
__fpurge (stdin);
c = getchar ();

if (c == 'N' || c == 'n'){
s -> link = NULL;
break;
}

s -> link = _getnode ();
s = s -> link;
}

s = t;

free(s);
free(t);

putchar('\n');
return (0);
}

当我只输入一个数字时,valgrind 说,没有内存泄漏。但除此之外还有。我明白,我必须释放的不仅仅是第一个节点,但我不知道如何。

最佳答案

首先,行

free(s);
free(t);

是多余的,因为您已经在上一行中分配了 s = t;

发生内存泄漏是因为您只在头指针上使用了free,而不是链表中的所有节点。因此,理想情况下,您应该循环遍历所有节点并释放分配给每个节点的内存,您的代码应如下所示:

while(s != NULL)
{
t = s->link;
free(s);
s = t;
}

关于c - 释放链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808638/

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