【问题标题】:Allocating memory to array of strings in c将内存分配给c中的字符串数组
【发布时间】:2014-08-24 02:52:31
【问题描述】:

我正在创建一个哈希表。我正在为容量、键数、频率和键本身使用结构。这是我初始化结构的代码:

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 类型)的指针?那么当我分配内存时,使用keys[0]是否正确?我假设这 只代表char指针的大小?这就引出了我的下一个问题,即我什么时候 实际上设置数组中的键(这显然是在另一个函数中)我只是 在存储之前按我输入的字符串的大小为每个索引分配内存?

h->keys[index] = emalloc(sizeof(str)

感谢您的回答!

【问题讨论】:

    标签: c memory struct


    【解决方案1】:

    假设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);
    

    【讨论】:

    • 嘿,感谢您的回复,我使用了:result->frequencies = 0;结果->键= NULL;因为我想将所有元素分别设置为 0 和 NULL。我该怎么做?
    • 你可以使用calloc
    猜你喜欢
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2022-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多