在我附加的C程序中,我已经定义了一个名为push()
的单独函数,用于将节点添加到链接列表的前面。 push()
为堆上的node
分配内存,但是我无法释放内存,因为push()
完成的工作不会反映在调用者(main()
)中。那么如何从main()
内部释放相关的堆分配内存?
感谢任何形式的帮助。提前谢谢。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
/* Prototypes */
void push(struct node **headRef, int data);
int main(void)
{
struct node *head, *tail, *current;
int i;
head = NULL;
// Deal with the head node here, and set the tail pointer
push(&head, 1);
tail = head; // tail and head now point to the same thing
// Do all the other nodes using TAIL
for (i = 2; i < 6; i++)
{
push(&(tail->next), i); // add node at tail->next
tail = tail->next; // advance tail to point to last node
}
current = head;
while (current)
{
printf("%d ", current->data);
current = current->next;
}
printf("\n");
return 0;
}
/*
Takes a list and a data value.
Creates a new link with the given data and pushes
it onto the front of the list.
The list is not passed in by its head pointer.
Instead the list is passed in as a "reference" pointer
to the head pointer -- this allows us
to modify the caller's memory.
*/
void push(struct node **headRef, int data)
{
struct node *newNode = malloc(sizeof(struct node));
newNode->data = data;
newNode->next = *headRef; // The '*' to dereference back to the real head
*headRef = newNode; // ditto
}
答案 0 :(得分:1)
您可以像{ - 1}}一样释放分配的空间 -
main
因为您在struct node * tmp;
while(head){
tmp = head;
head = head->next; //this is to avoid loosing reference to next memory location
free(tmp);
}
中传递变量的地址,所以这是可能的。