【发布时间】:2014-02-17 19:47:26
【问题描述】:
我正在尝试动态分配指向结构指针的指针列表,每个结构指针都包含具有以下定义的结构列表:
struct node {
char *text;
struct node *next; };
我也在使用 typedef:
typedef struct node Node;
我通过声明以下内容来创建一个节点列表来保存每个列表:
Node **list;
list = (struct node**) malloc(sizeof(struct node*) * arraySize);
在list 的每个节点上,我将创建另一个列表,如下所示:
list[i] = malloc(sizeof(struct node*) * subArraySize);
我有几个问题:
- 这是解决此类问题的正确实现方式吗?
- 如何访问较大列表中每个列表的第一个节点的
text数据成员?
如果我的问题含糊不清,请告诉我。我对这个话题的困惑使我很难正确地表达我的问题。
【问题讨论】:
-
你的 typedef 没有用。您使用单词“list”(和变量名
list)来指代列表和数组。当您不清楚您是否有任何层正常工作时,您正在尝试使用间接塔。你必须从简单的问题开始,解决复杂的问题,否则你肯定会失败。 -
看起来您正在尝试构建一个包含指向多个链表头部的指针的数组,对吧?第二部分
list[i] = malloc(sizeof(struct node*) * subArraySize);有点误导,因为您提前分配了几个nodes 的连续内存块,而通常您可能会在创建每个节点时为其分配内存,或者至少您不会'不要使用这个结构,它是一个非常严格的二维数组。 -
如果您试图创建一个指向链表的动态指针数组,则辅助 malloc 没有任何意义。后者是一个链表,因此不需要向量分配(假设
next成员不只是用于装饰橱窗或其他邪恶目的)。也就是说,您真正要解决的问题是什么,带有冲突链的哈希表?