从结构中的指针访问结构的值

时间:2016-09-08 17:48:07

标签: c arrays pointers struct hashmap

我会尽量保持这个简短。 所以我有两个结构:

typedef struct someStruct named;
struct someStruct {
    void *key;                  
    void *value;                    
};
typedef struct anotherStruct namedToo;
struct anotherStruct {
    named **table;          
    unsigned int size;          
};

好的,现在发现任何可能的错误,这是不可编辑的代码。

现在我有两种方法:

namedToo *init(float ignoreThis) {
    namedToo *temp;
    temp = malloc(sizeof(namedToo)); //some memory for the second struct
    temp->table = malloc(sizeof(named)*100); //lets say this 100 is for 100 buckets/cells/named elements
    return temp;

方法2:

int insert(namedToo *temp, void* key, void* value) {
     temp->table[0]->key = key; //My problem, I need to access the value and key inside named from the pointer inside namedToo. How can I do this?
}

评论有我的问题: 我的问题,我需要从namedToo里面的指针访问命名的值和键。我怎样才能做到这一点?我需要不时地自行更改并获取值/键。

1 个答案:

答案 0 :(得分:2)

声明named **table;表示table是指向named的指针,或者是指向named的指针数组。后者似乎是你想要的。

这个分配:

temp->table = malloc(sizeof(named)*100); 

为100 named分配空间,但您需要的是100 named *,其中每个都必须指向named。鉴于named的定义,这可能是足够的空间,但是此时你有一个未初始化的指针数组。尝试访问它们会产生undefined behavior,在这种情况下会显示为核心转储。

您需要为指针数组分配空间,然后将每个指针初始化为单个动态分配的named实例。所以你应该像这样分配空间:

int i;
temp->table = malloc(sizeof(named *)*100);
for (i=0; i<100; i++) {
    temp->table[i] = malloc(sizeof(named));
}

然后您的insert方法应该正常运行。