【问题标题】:Array of Array of structs in c99c99中的结构数组数组
【发布时间】:2017-11-15 08:14:38
【问题描述】:

我正在尝试在 c 中实现哈希映射。我试图通过创建一个结构来保存这样的哈希和键来解决这个问题。

struct bucket{
char * key;
char * value;
};

然后我创建这些结构的数组来保存所有相同但具有不同键的哈希。像这样:

struct bucket * buckets;
buckets = malloc(numberOfBuckets);

然后我被卡住的地方是制作一个数组来存储这些数组。我认为它是这样完成的:

struct bucket * arrayOfArrays;
arrayOfArrays = malloc(++numberOfKeys);
arrayOfArrays[0] = buckets;

这给了我错误:

incompatible types when assigning to type 'struct bucket' from type 'struct bucket *'

【问题讨论】:

  • 你可能分配的内存太少了,你知道的。除非你的例子是写得很糟糕的伪代码。
  • 想想你在做什么。如果有 n 个键,那么您将分配 n 个字节。您需要分配 n struct bucket。提示:需要使用sizeof来计算字节数。
  • @StoryTeller 抱歉忘记包含 arrayOfArrays 的第二个 malloc
  • 不,我说的是第一个malloc,其实
  • 这绝对不是您遇到的错误。不要发明错误信息。逐字复制粘贴。

标签: c arrays struct c99


【解决方案1】:
struct bucket * arrayOfArrays;
arrayOfArrays[0] = buckets;

改成

struct bucket ** arrayOfArrays;
arrayOfArrays = malloc(sizeof(struct bucket *) * numberOfArrays);
arrayOfArrays[0] = buckets;

它应该适合你。

您还需要更改第一次分配以获得足够的字节数:

struct bucket * buckets;
buckets = malloc(sizeof(struct bucket) * numberOfBuckets);

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多