C 哈希表实现——意外行为

时间:2021-01-05 05:10:04

标签: c pointers segmentation-fault

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 * 的指针时,代码工作正常。

这两者有什么区别?

0 个答案:

没有答案
相关问题