我试图释放链接列表中的每个节点,这些节点是在addRec函数中分配的。
更改:将我的自由功能重命名为free_list。
我的免费电话如下:
main()
{
struct record * start = NULL;
runmenu(......,start); //Ends when user chooses option to quit
.
.
free_list(start);
}
void runmenu(.....,struct record * pstart)
{
addRec(&start,....);
}
void addRec(struct record ** start,.....)
{
struct record *toAdd;
toAdd = (struct record*)malloc(sizeof(struct record));
if (*start = NULL)
{
*start = toAdd;
} else {
struct record *current = start;
toAdd->next = current->next;
current->next = toAdd;
.
. //Adds into linked list
}
}
我的自由功能如下:
void free_list(struct record* head)
{
struct record *temp;
while((temp = head) != NULL)
{
head = head->next;
free(temp);
}
}
我似乎仍然有内存泄漏。这是对的吗?
答案 0 :(得分:1)
您提供了自己的名为free()
的功能,这意味着标准功能无法使用。重命名您的函数free_list()
并在main()
中调用它以释放列表。在(现已重命名)free_list()
函数内,您仍然可以调用标准free()
函数。