将内存分配给c中的字符串数组

时间:2014-08-24 02:52:31

标签: c memory struct

我正在创建哈希表。我正在使用结构来获取容量,键数,频率和键本身。这是我初始化结构的代码:

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)

感谢您的回答!

1 个答案:

答案 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);