我对在web上找到的一段代码有一些问题,该代码位于http://www.c.happycodings.com/Data_Structures/code9.html.
- 为什么strarray被定义为
**
-
我们必须先对数组进行
malloc()
,然后对数组的每个元素进行malloc()
吗?strarray = (struct node **)realloc(strarray, (count + 1) * sizeof(struct node *));
strarray[count] = (struct node *)malloc(sizeof(struct node));
-
如何完全释放()这个数组?
感谢
-
strarray
是指向指针数组的指针,每个指针指向一个节点结构。这是对象数组的基本表示。对于基本类型,您只能使用一个*
,因为它是指向基本类型数组的指针。你也可以对structs这样做,这取决于你想对数组做什么。 -
是的,是的。
-
首先遍历数组,释放每个成员,然后释放数组。释放的线索:释放你分配的一切。
-
strarray
属于struct node **
类型,因为它是一个动态分配的struct node *
数组,即指针数组,其中每个元素都指向一个struct node
。 -
不,根据您想要实现的目标,您可以简单地分配一块内存来容纳X
struct node
,并将该指针分配给struct node *
。编写该代码的人为指针数组分配了内存,这就是为什么他们随后调用malloc
为每个单独的struct node
分配内存。与简单地分配连续
struct node
的单个块相比,它们使用指针的动态数组来动态分配struct node
的可能性可能与减少在调用realloc
时复制整个数组的成本有关(如果需要的话)。 -
为了释放记忆,你可以反过来做。释放数组中的每个元素,然后释放整个数组。