RecursiveFree函数-警告:从不兼容的指针类型[-Wincompatible-pointer-types]进行初始化

时间:2019-02-23 19:11:58

标签: c pointers recursion nodes quadtree

我有一个递归释放的函数:

#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 :(得分:1)

您收到错误消息,因为指向Nodechild)数组的指针不能转换为指向Nodep)的指针。

由于child是由四个指向Node的指针组成的数组,因此您必须分别释放它们:

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

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

    free(p);
}