【发布时间】:2015-09-27 13:52:37
【问题描述】:
我无法正确释放我的链表。我真的不知道,如何用头部和电流来制作它......
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 所说,没有内存泄漏。但除此之外还有。我明白,我必须释放的不仅仅是第一个节点,但我不知道如何。
【问题讨论】:
-
使用
__fpurge不是一个好主意 - 它不可移植等。双下划线是一种放弃 -
不要转换
malloc()的返回值。您需要释放每个节点。
标签: c memory-leaks linked-list valgrind free