C-如何从另一个函数中通过一个函数动态分配的自由存储器



在我附加的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
}

您可以释放main中的分配空间 -

struct node * tmp;
while(head){
    tmp = head;
    head = head->next; //this is to avoid loosing reference to next memory location
    free(tmp); 
}

由于您通过push中的变量地址,因此这是可能的。

最新更新