Как освободить память, выделенную локальной переменной из функции вызывающего в C? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть такая функция ниже, и я хотел бы освободить память, выделенную переменной 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 голосов
/ 28 октября 2019

Вот способ освободить связанный список.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...