[英]Access values of structs from a pointer in a struct
我將嘗試使其盡可能簡短。 所以我有兩個結構:
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;
的聲明named **table;
說table
是指向named
指針的指針,或者是指向named
的指針的數組。 后者似乎是您打算的。
此分配:
temp->table = malloc(sizeof(named)*100);
為100個named
空間分配空間,但是您需要100個named *
,並且每個空間必須指向一個named
。 給定named
的定義,這可能有足夠的空間,但是,此時您有一個未初始化的指針數組。 嘗試訪問它們會導致未定義的行為 ,在這種情況下,這表現為核心轉儲。
您需要為一個指針數組分配空間,然后將每個指針初始化為一個動態分配的named
實例。 因此,您應該像這樣分配空間:
int i;
temp->table = malloc(sizeof(named *)*100);
for (i=0; i<100; i++) {
temp->table[i] = malloc(sizeof(named));
}
然后,您的insert
方法應該可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.