typedef struct kvNode
{
int key;
int value;
struct kvNode* next;
} kvNode_t;
typedef struct
{
int size;
kvNode_t** arrayOfKvNodes;
} hashTable_t;
bool hashTable_create(hashTable_t *ht, int size)
{
int i;
ht = (hashTable_t *)malloc(sizeof(hashTable_t));
if(ht == NULL)
{
return false;
}
ht->size = size;
ht->arrayOfKvNodes = (kvNode_t **)malloc(size * sizeof(kvNode_t *));
if(ht->arrayOfKvNodes == NULL)
{
return false;
}
// initialize every cell to NULL
for(i=0; i<size; i++)
{
ht->arrayOfKvNodes[i] = NULL;
}
return true;
}
void main()
{
hashTable_t hashTableA;
printf("Create Hash Table\n");
hashTable_create(&hashTableA, 10);
printf("Size of hash table: %d\n", hashTableA.size);
}
我正在尝试在 C
中实现一个哈希表。我在这里有一个创建函数,它初始化键值节点列表 **arrayOfKvNodes
的数组。
以上代码导致意外行为。
创建哈希表
尺寸 = -2039534832
然而,当我尝试这个函数原型:hashTable_t *hashTable_create(int size)
并返回一个指向 malloced hashTable_t *
的指针时,代码工作正常。
这两者有什么区别?