У меня есть задание на C, и у меня возникают проблемы с доступом к различным членам в моих структурах (некоторые уровни глубоко).Я понимаю основные принципы, но я где-то теряю это.У меня есть 3 структуры, причем верхняя содержит массив второй, которая, в свою очередь, содержит массив третьей.Моя текущая проблема - правильно использовать malloc.Вот часть моего кода.Я был бы признателен за любую информацию или советы, потому что мне еще предстоит пройти долгий путь, и, как вы видите, структуры довольно сложны.
.h file
typedef struct user {
char* userID;
int wallet;
bitCoinList userBC; //Also a list
senderTransList userSendList; //Yes it has lists too..
receiverTransList userReceiveList;
}user;
typedef struct bucket {
struct bucket* next;
user** users;
}bucket;
typedef struct hashtable {
unsigned int hashSize;
unsigned int bucketSize;
bucket** buckets;
}hashtable;
Вотмоя функция для создания и инициализации хеш-таблицы .. Я получаю ошибку, когда пытаюсь получить доступ к пользователям с HT->buckets->users
(запрос пользователей-членов в чем-то, не являющемся структурой или объединением)
.c file
// Creation and Initialization of HashTable
hashtable* createInit(unsigned int HTSize,unsigned int buckSize){
hashtable* HT = (hashtable*)malloc(sizeof(hashtable));
if(HT==NULL) {
printf("Error in hashtable memory allocation... \n");
return NULL;
}
HT->hashSize=HTSize;
HT->bucketSize=buckSize;
HT->buckets = malloc(HTSize * sizeof(HT->buckets));
if(HT->buckets==NULL) {
printf("Error in Buckets memory allocation... \n");
return NULL;
}
HT->buckets->users = malloc(buckSize * sizeof(HT->buckets->users));
if(HT->buckets->users==NULL) {
printf("Error in Users memory allocation... \n");
return NULL;
}
for(int i=0; i <HTSize; i++){
HT->buckets[i] = malloc(sizeof(bucket));
HT->buckets[i]->next = NULL;
if(HT->buckets[i]==NULL) {
printf("Error in Bucket %d memory allocation... \n",i);
return NULL;
}
for(int j=0; j <buckSize; j++){
HT->buckets[i]->users[j] = malloc(sizeof(user));
if(HT->buckets[i]==NULL) {
printf("Error in User %d memory allocation... \n",i);
return NULL;
}
}
}
return HT;
}