在我因没有查看“类似”问题而被否决之前,我找不到任何人真正尝试将整个分配的“数组”初始化为 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/