我会尽量保持这个简短。 所以我有两个结构:
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里面的指针访问命名的值和键。我怎样才能做到这一点?我需要不时地自行更改并获取值/键。
答案 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
方法应该正常运行。