我正在创建哈希表。我正在使用结构来获取容量,键数,频率和键本身。这是我初始化结构的代码:
htable htable_new(int capacity) {
htable result = emalloc(sizeof *result);
result->capacity = capacity;
result->frequencies = emalloc(capacity * sizeof result->frequencies[0]);
result->keys = emalloc(capacity * sizeof result->keys[0]);
result->frequencies = 0;
result->keys = NULL;
return result;
}
现在,根据我的理解,char **数组是一个指针数组(char类型)的指针?所以当我分配内存时,使用密钥[0]是否正确?我认为这个 只表示char指针的大小?这导致了我的下一个问题 实际上我设置了数组中的键(显然是在另一个函数中) 在存储之前,通过我输入的字符串的大小为每个索引分配内存?
即。 h->keys[index] = emalloc(sizeof(str)
感谢您的回答!
答案 0 :(得分:3)
假设emalloc
是有效的宏或函数,
电话
result->frequencies = emalloc(capacity * sizeof result->frequencies[0]);
result->keys = emalloc(capacity * sizeof result->keys[0]);
没关系。但是,接下来的两行:
result->frequencies = 0;
result->keys = NULL;
立即导致内存泄漏。我不知道你为什么拥有它们。他们应该被删除。
假设str
类型为char*
或char const*
,则该行
h->keys[index] = emalloc(sizeof(str));
不会为h->key[index]
分配必要的内存量。这将分配足够的内存来仅保留char*
。你需要:
h->keys[index] = emalloc(strlen(str)+1);
strcpy(h->keys[index], str);