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