При попытке вставить строку в хеш-таблицу я получаю ошибку ошибки сегментации, даже если позиция, вычисленная хеш-функцией, является действительной.
#define initial_size 23
typedef struct user{
char nick[6];
char name[26];
}user;
typedef struct hashtable{
int size;
user **buckets;
}hashtable;
int elements = 0;
int size = initial_size;
hashtable * create() {
hashtable *htable = malloc(sizeof(htable));
htable->size = initial_size;
htable->buckets = calloc(initial_size, sizeof(htable->buckets));
return htable;
}
int hash(char *string) {
int hashVal = 0;
for( int i = 0; i < strlen(string);i++){
hashVal += (int)string[i];
}
return hashVal;
}
void insert(hashtable *HashTable, char *name, char *nick){
HashTable = resize_HashTable(HashTable);
int hash_value = hash(nick);
int new_position = hash_value % HashTable->size;
if (new_position < 0) new_position += HashTable->size;
int position = new_position;
while (HashTable->buckets[position] != 0 && position != new_position - 1) {
position++;
position %= HashTable->size;
}
strcpy(HashTable->buckets[position]->name, name);
strcpy(HashTable->buckets[position]->nick, nick);
HashTable->size = HashTable->size++;
elements++;
}
ошибка в следующих строках:
strcpy(HashTable->buckets[position]->name, name);
strcpy(HashTable->buckets[position]->nick, nick);
При использовании этого ввода:
int main(){
hashtable *ht = create();
insert(ht, "James Bond", "zero7");
return 0;
}
Я не могу понять, почему это происходит, поскольку в случае выше вычисленная позиция хеша будет равна 20, а размер хеш-таблицы будет равен 23.
Какие-нибудь советы по решению проблемы?Заранее спасибо.