Realloc二叉树-如何更新指针

Realloc二叉树-如何更新指针,c,memory,C,Memory,对于链接列表上的学校作业,我正在编写人员数据库,我已通过此结构的二叉树实现了此数据库: typedef struct TPeople { TPeople * m_Parent_1; TPeople * m_Parent_2; int m_ID; char * m_Name; } TPEOPLE; 我使用以下代码创建数组: int allocated = 20; TPEOPLE * data = (TPEOPLE*) calloc(allocated, sizeof

对于链接列表上的学校作业,我正在编写人员数据库,我已通过此结构的二叉树实现了此数据库:

typedef struct TPeople {
    TPeople * m_Parent_1;
    TPeople * m_Parent_2;
   int m_ID;
   char * m_Name;
} TPEOPLE;
我使用以下代码创建数组:

int allocated = 20;
TPEOPLE * data = (TPEOPLE*) calloc(allocated, sizeof (TPEOPLE));
并重新配置:

allocated *= 2;
data = (TPEOPLE*) realloc(data, allocated * sizeof (TPEOPLE));
memset(data + allocated /2,0,allocated/2 * sizeof (TPEOPLE));
因为每个人都会有一段时间没有孩子,我已经将他们存储在数组中,否则我就再也找不到他们了

但问题来了,因为数组的默认大小不足以容纳它们。但当我重新定位数组时,所有这些父指针都指向已经空闲的内存中的旧位置

如何解决这个问题


感谢Rfilip,这不是分配二叉树节点的正确方法。通常,每个节点都是独立分配的:它们不需要位于物理上连续的内存中,因为它们具有指向彼此的指针。因此,您不需要它们的数组


如果您想跟踪所有节点以便以后释放它们,只需将指向每个节点的指针放在指向节点的指针的较大数组中,您可以随意
realloc

是否可以发布分配和数组声明部分。我知道,但正如我在问题中所说,在一段时间内,每个人都不会有孩子,也不会有任何关于孩子的指示。数组是保存指针的一种方式。在创建子指针时分配它们,并确保在创建时将它们放入数组中。(或者按照我第二段所说的做,制作一个指向节点的指针数组)