【问题标题】:Realloc binary tree - how to update pointersRealloc 二叉树 - 如何更新指针
【发布时间】:2014-12-16 19:58:43
【问题描述】:

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

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

【问题讨论】:

  • 能否请您发布您的分配和数组声明部分。

标签: c memory


【解决方案1】:

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

如果您想跟踪所有节点以便以后释放它们,您可以简单地将指向每个节点的指针放在更大的指向节点的数组中,您可以realloc请。

【讨论】:

  • 我知道,但正如我所说的那样,每个人都会在一段时间内没有孩子并且没有任何指针。数组是保持指针的方式。
  • 在创建孩子时分配它们,并确保在它们出现时将它们放入数组中。 (或者就像我第二段所说的那样,创建一个可重新分配的指向节点的指针数组)
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多