【问题标题】:Creating a struct which holds a 2d array of linked lists with custom object创建一个结构,该结构包含一个带有自定义对象的二维链表数组
【发布时间】:2019-06-26 13:23:36
【问题描述】:

我是 C 的新手,并试图理解一些基本的东西。 我正在尝试创建一个包含由链表组成的数组的结构。 围绕这个。

--------------------------------
|    A    |     B    |    C    |
--------------------------------
      |         |          | 
      V         V          V
   -------    -------    -------
   |  a  |    |  b  |    |  c  |
   -------    -------    -------
      |
      V
   --------
   |  a1  |
   --------

意思是有一个数组来保存每个链表的头(A,B和C),每个头都将保存一个指向下一个节点的指针。

我有一个结构对象

typedef struct Object {
    void* data;
    struct Object* next;
    struct Object* head;
}Object;

还有一个包含更多信息的表格

typedef struct Table {
    Object** arr;
    //More info...//
}Table;

我有一个函数应该用数组创建一个表。

Table* createTable(){

    Table* table = (Table*)malloc(sizeof(struct Table*));

    Object **array = (Object**)malloc(3*sizeof(struct Object*));

    for(int j = 0; j < size; j++){
        array[j] = malloc(sizeof(struct Object));
    }
table->arr = array;
return table;

}

但是我所有的记忆都没有像我希望的那样工作,我一直得到一个只有一个节点的数组。 我想我仍然缺少一些基本的东西。

谢谢

【问题讨论】:

  • malloc(sizeof(struct Table*)-> malloc(sizeof(struct Table)
  • ...而for(int j = 0; j &lt; size; j++) 中的size 是什么?
  • Do I cast the result of malloc?。此外,您所做的与设置哈希表没有太大区别。您可能想查看“桶”(数组)如何占据冲突发生时实现的“链式”列表的头部。 Object **array = malloc (3 * sizeof *array); 就足够了。

标签: c arrays object linked-list


【解决方案1】:

Table* table = (Table*)malloc(sizeof(struct Table*))有错,应该是Table* table = malloc(sizeof(struct Table))

但是你的代码的其余部分是这样编写的,它将创建一个大小为3 的数组,其中包含指向Object 的指针,并且它会通过让数组的每个元素指向一个Object 来初始化这个数组。创建(我想你的size-variable 在其他地方初始化为3,否则你现在知道在哪里搜索)。所以很明显,你在数组的每个位置只得到一个元素,你根本不需要创建更多......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2020-03-19
    • 2012-07-30
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多