0

关于我在网络上找到的一段代码,我有几个问题,该代码位于http://www.c.happycodings.com/Data_Structures/code9.html

  1. 为什么 strarray 被定义为**
  2. 我们是否必须先是malloc()数组,然后malloc()是它的每个元素?

    strarray = (struct node **)realloc(strarray, (count + 1) * sizeof(struct node *));

    strarray[count] = (struct node *)malloc(sizeof(struct node));

  3. 如何完全释放()这个数组?

谢谢

4

2 回答 2

2
  1. strarray是指向指针数组的指针,每个指针都指向一个节点结构。这是对象数组的基本表示。对于基本类型,您只能使用 one *,因为它是指向基本类型数组的指针。您也可以对结构执行此操作,这取决于您要对数组做什么。

  2. 是的,是的,你知道。

  3. 首先遍历数组,释放每个成员,然后释放数组。释放的线索:释放你分配的所有东西。

于 2012-09-13T07:41:14.400 回答
1
  1. strarray是类型struct node **,因为它是一个动态分配的数组struct node *- 即。一个指针数组,其中每个元素指向一个struct node.

  2. 不,根据您要实现的目标,您可以简单地分配一块内存来保存 X struct node,并将该指针分配给 a struct node *。编写该代码的人为指针数组分配内存,这就是为什么他们随后调用malloc为每个人分配内存struct node

    他们使用动态指针数组的可能性struct node,而不是简单地分配单个连续块,struct node这可能与减少调用时复制整个数组的成本(如果需要)有关realloc

  3. 为了释放内存,你做相反的事情。释放数组中的每个元素,然后释放整个数组。

于 2012-09-13T07:46:06.153 回答