繁体   English   中英

动态结构数组

[英]Dynamic Array of Structures

我对在网上找到的一段代码有一些疑问,该代码位于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. 如何完全释放()此数组?

谢谢

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

  2. 是的,是的。

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

  1. strarray类型为struct node **因为它是struct node *的动态分配数组-即。 指针数组,其中每个元素都指向一个struct node

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

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

  3. 要释放内存,请反向进行操作。 释放数组中的每个元素,然后释放整个数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM