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

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内的指针访问named内的值和键。我该怎么做?我需要不时地自己更改和获取值/密钥。

最佳答案

声明说named **table;是指向table的指针,或者是指向named的指针数组。后者是你似乎想要的。
此分配:

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

为100named分配空间,但您需要的是100named,并且每个都必须指向anamed *。给定named的定义,这可能有足够的空间,但是此时有一个未初始化指针数组。尝试访问它们会导致undefined behavior,在本例中,它显示为核心转储。
您需要为一个指针数组分配空间,然后将每个指针初始化为一个动态分配的named实例。所以你应该这样分配空间:
int i;
temp->table = malloc(sizeof(named *)*100);
for (i=0; i<100; i++) {
    temp->table[i] = malloc(sizeof(named));
}

那么您的named方法应该可以正常工作。

关于c - 从结构体中的指针访问结构体的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39397248/

10-10 04:53