如何释放局部变量从C中的调用程序函数分配的内存?

时间:2019-10-27 21:02:01

标签: c malloc

下面我有一个类似的函数,我想释放调用方函数中temp1变量分配的内存。

// Code to insert element at Nth position
void Insertion (int num, Node **head)
{
    // I can't free this variable in this function because 
    // it will be used in future to navigate through the list. 
    // I would like to avoid global variables as well.
    Node *temp1 = (Node*)malloc(sizeof(Node)); 
    temp1->data = data;
    temp1->next = NULL;

    Node *temp2 = *head;
    for (int i = 0; i < position - 2; i++)
    {
        temp2=temp2->next;
    }
    temp1->next = temp2->next;
    temp2->next = temp1;

    return 0;
}

呼叫者函数如下所示

int main(void)
{
    Node *head = NULL;

    Insertion (30, 1, &head);
    .....
    .....

    return 0;
}

有人知道我在这里有什么选择吗?

  1. 是否应该将Insertion的返回类型从void *更改为void,然后释放该函数?我强烈感觉到我在这里做无效的事情。
  2. 是否应该将temp1作为参数传递? (这会使事情复杂化,所以我想避免这种方法)

1 个答案:

答案 0 :(得分:0)

这是释放链表的一种方法。

struct Node {
    void *data;
    struct Node *next;
};

void free_list(struct Node *head)
{
    if(head->next)
        free_list(head->next);
    if(head->data)
        free(head->data);
    free(head);
}