как освободить блок памяти, когда мне нужно вернуть его обратно? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть эта функция для моего связанного списка, и я должен вернуть ее как журнал (структура). когда я запустил valgrind, я обнаружил, что у меня есть утечка памяти, которая является mallo c. Мне интересно, как я могу освободить entry? или есть способ вернуть данные внутри записи без создания нового объекта (? idk, как он называется)

Journal *removeStart(LinkedList *list) {
    Node *front;
    Journal *entry = malloc(sizeof(Journal));
    front = list->head;
    entry = front->data;
    if (list->head==NULL) {
        entry = NULL;
    }

    list->head = list->head->next;
    front->next = NULL;

    if (front == list->head) {
        list->head = NULL;
    }

    free(front);
    return entry;

}

Journal *removeLast(LinkedList *list) {
    Node *end;
    Journal *entry = malloc(sizeof(Journal));


    if (list->head == NULL) {
        entry = NULL;
    }

    end = list->head;
    while (end->next != NULL) {
        end = end->next;
    }
    if (list->head->next==NULL) {
        entry = list->head->data;
        list->head = NULL;
    }
    else {
        entry = list->head->data;
        end->prev->next = NULL;
    }


    free(end);
    return entry;

}

моя структура для журнала

#define SIZE 102
typedef struct {
    int day;
    int month;
    int year;
    char entry[SIZE];
} Journal;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...