c - 哈希表的指针数组
问题描述
我正在尝试在 C 中实现一个简单的哈希表,其中我有两个结构,一个用于条目,一个用于表本身:
typedef struct hash_table_entry {
int key;
int data;
struct hash_table_entry *next;
} HT_ENTRY;
typedef struct hash_table {
int size;
int entry_count;
HT_ENTRY **table;
} HT;
创建表时我的mallocs:
if ((ht_table = (HT*)malloc(sizeof(HT))) == NULL)
return NULL;
if ((ht_table->table = (HT_ENTRY**)malloc(size * (sizeof(HT_ENTRY*)))) == NULL)
return NULL;
for (i = 0; i < size; i++) {
if ((ht_table->table[i] = (HT_ENTRY*)malloc(sizeof(HT_ENTRY))) == NULL)
return NULL;
}
分配表时,我的第二个 malloc 没有创建我希望他做的所需大小的指针数组:调试器的图片
为什么我的 malloc 会这样做,正确的语法是什么?
解决方案
您正在分配哈希表中的各个条目,但没有与这些条目关联的数据,实际上它们未初始化,当您尝试使用哈希表时会导致未定义的行为。相反,您应该只用指针初始化指向的指针ht_table->table
数组NULL
:
ht_table->size = size;
ht_table->entry_count = 0;
for (i = 0; i < size; i++) {
ht_table->table[i] = NULL;
}
或者简单地分配数组calloc()
:
ht_table->size = size;
ht_table->entry_count = 0;
if ((ht_table->table = (HT_ENTRY**)calloc(size, sizeof(HT_ENTRY*))) == NULL)
return NULL;
malloc
也不是在 C 中,不需要转换and的返回值calloc
。分配数组的一种更安全的方法是:
if ((ht_table->table = calloc(size, sizeof(*ht_table->table))) == NULL)
return NULL;
推荐阅读
- slider - html、css、js 滑块图像在窗口调整大小时折叠
- python - 从 az.plot_ppc 观察到的曲线与实际数据的 kde 图不匹配
- javascript - 在 Elm 中编辑起始页
- asp.net - 为记录和更新字段中的行创建按钮
- lua - “尝试索引一个零值(字段'?')”
- react-native - Tab Navigator 不适用于 expo 独立 android 应用程序
- azure - 添加到项目时的 Azure DevOps 通知
- arrays - Bash文件通过字符串与数组存在测试
- excel - 与笔记本电脑相比,在 Surface 平板电脑上运行时获得不同的结果
- vb.net - 如何使用 vb.net 和 cmd 检查程序是否在不同的服务器上运行