Утечка памяти в рекурсивной функции - PullRequest
0 голосов
/ 19 октября 2019

Я получаю утечку памяти и знаю, что для каждого malloc должна быть бесплатная. Тем не менее, я не уверен, почему мы должны что-то здесь освобождать.

Функция состоит в том, чтобы, учитывая двоичное дерево поиска, вставить в него узел.

Файл заголовка:

typedef struct BSTNode *BSTree;
struct BSTNode {
      int value;
      BSTree left;
      BSTree right;
}

Программа, которую я написал для выполнения этой задачи:

#include <stdio.h>
#include <stdlib.h>

#include "BSTree.h"

BSTree BSTreeInsert(BSTree t, int val) {

    if (t == NULL) {
        BSTree new = malloc(sizeof(*new));
        new->left = NULL;
        new->right = NULL;
        new->value = val;
        return new;
    }

    if (t->value > val) {

        t->left = BSTreeInsert(t->left,val);

    } else {

        t->right = BSTreeInsert(t->right,val);

    }

    return t;

}

Вывод программы выглядит правильно, поэтомулогика верна, но это просто утечки памяти.

Функция тестируется на серверах моей школы, поэтому она запускает мою функцию несколько раз на разных входах и сравнивает ее с ожидаемыми выходами. Тесты говорят, что мой вывод правильный, просто есть утечки памяти.

...