c - 链表数组初始化

标签 c arrays pointers struct linked-list

在我因没有查看“类似”问题而被否决之前,我找不到任何人真正尝试将整个分配的“数组”初始化为 NULL。

我正在尝试创建一个哈希表。第一个 malloc 用于数组,第二个 malloc 用于创建哈希表结构以放入数组。我计划使用链表(此处称为 ListNode)实现碰撞链。在为数组分配空间并将其放入结构中后,我想将数组内的所有链接列表初始化为 NULL。

到目前为止,这段代码将链接列表的指针分配为 NULL(偶然...我不知道如何修复),因此它们指向内存位置 0x0。不知何故,在底部的 for 循环进行 3 次左右迭代后,整个哈希表结构现在指向 0x0,并且我遇到了段错误。

我所有的指针怎么突然变成了空,而不仅仅是我的链表?如何使 ListNode 指针 = NULL 以便我可以对它们执行正常的链表操作?

typedef struct
{
    ListNode **array;
    /* more stuff */
} HTable;

void *HTCreate(unsigned sizes[], int numSizes){
  arr = (ListNode*)malloc(sizeof(ListNode) * sizes[0]);

  if(arr == NULL)
  {
      exit(1);
  }

  ht = (HTable*)malloc(sizeof(HTable));
  ht->array = &arr;
  ht->sizes = size;
  /* more initializing */
  for(i = 0; i < ht->sizes[ht->sizeIndex]; i++)
  {
      ht->array[i] = NULL;
  }

return (void *)ht; }

我有一些理论......这可能是 &arr 的问题,而且我将双指针混淆了,但我已经在结构中使用双指针和单指针尝试过这个,所以我彻底迷失了。

提前致谢!

最佳答案

根据您显示的代码,ht->array 的唯一有效索引是 0。其他一切都将超出范围。

如果你想要一个指针数组,你需要分配这样一个数组:

// Allocate an array of pointers, each pointer being initialized to NULL
ht->array = calloc(sizes[0], sizeof(ListNode *));

关于c - 链表数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577671/

相关文章:

objective-c - 使用多个键订购 NSMutableDictionary

javascript - 无法理解为什么使用展开运算符

c++ - 使用 void 指针在 C++ 中打印数组

c - 尝试输入值并使用指针将它们打印在矩阵中

在等待状态下检查线程状态

c - 预期表达式错误为 `[]`

arrays - 在 Swift 中处理包含数组的结构体的指针

c - C中的数组数组,其中数组的长度不同

c - 我在 C 中的数组函数调用中出错?

c++ - 数组和指针