我会尽量保持简短。
所以我有两个结构:
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);
为100
named
分配空间,但您需要的是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/