Функция RecursiveFree - Предупреждение: инициализация из несовместимого типа указателя [-Wincompatible-pointer-types] - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть функция, которая рекурсивно освобождает:

#include "treeStructure.h"

void destroyTree (Node* p)
{
    if (p==NULL)
        return;
    Node* free_next = p -> child; //getting the address of the following item before p is freed
    free (p); //freeing p
    destroyTree(free_next); //calling clone of the function to recursively free the next item
}

treeStructure.h:

struct qnode {
  int level;
  double xy[2];
  struct qnode *child[4];
};
typedef struct qnode Node;

Я получаю сообщение об ошибке

Предупреждение: инициализация из несовместимого типа указателя [-Wincompatible-pointer-types]

и его указание на 'p'.

Я не понимаю, почему это происходит.

Может кто-нибудь объяснить и сообщить мне, как это исправить?

1 Ответ

0 голосов
/ 23 февраля 2019

Вы получаете сообщение об ошибке, потому что указатель на массив Node (child) не может быть преобразован в указатель на Node (p).

Как childмассив из четырех указателей на Node вы должны освободить их отдельно:

void destroyTree (Node* p)
{
    if (!p) return;

    for (size_t i = 0; i < 4; ++i)
        destroyTree(p->child[i]);

    free(p);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...