Свободная структура двойного указателя - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу поместить все MinHeapNode в массив и освободить их после завершения печати программы.

Вот код, который создает массив и освобождает его:

void HuffmanCodes(int data[], int freq[], int size) {
        struct MinHeap *clear;
        int s = 0;
        struct MinHeapNode *nodes = malloc(sizeof(struct MinHeapNode) * ((4 * 2) - 1));
        struct MinHeapNode *root = buildHuffmanTree(data, freq, size, &clear);
        int arr[MAX_TREE_HT], top = 0;
        printCodes(root, arr, top, &nodes, &s);
        int i;
        for (i = 0; i < s; i++) {
                free(nodes[i]);
        }
        free(nodes);
        free(clear->array);
        free(clear);
}

Вот код, который захватывает каждый MinHeapNode и помещает его в узлы

void printCodes(struct MinHeapNode *root, int arr[], int top, struct MinHeapNode **nodes, int *s) {
        if (root->left) {
                arr[top] = 0;
                printCodes(root->left, arr, top + 1, nodes, s);
        }
        if (root->right) {
                arr[top] = 1;
                printCodes(root->right, arr, top + 1, nodes, s);
        }
        if (isLeaf(root)) {
                printf("%d: ", root->data);
                printArr(arr, top);
        }
        nodes[*s] = root;
        *s++;
}

Замена последних двух строк printCodes на "free (root);" работает, но я хочу освободить его вне функции.

...