Метод удаления хеш-таблицы - PullRequest
0 голосов
/ 07 июня 2018

Моя хеш-таблица использует эту структуру:

typedef struct bucket{
    user *info;
    bool available;
}bucket;

typedef struct user{
    char nick[6];
    int age;
}user;

typedef struct hashtable{
    int size;
    int elements;
    bucket **buckets;
}hashtable;

Я сделал эту функцию удаления для своей хеш-таблицы:

void delete_item(hashtable *HashTable, char *nick){
    int position = contains(HashTable, nick);
    if(position != -1){
        HashTable->buckets[position]->available = true;
        HashTable->buckets[position] = NULL;
        HashTable->elements--;
    }
}

Сама функция не вызывает ошибку, но если я удаляю элементесли я пытаюсь распечатать хеш-таблицу, то удаленная позиция дает ошибку сегментации .

Идея удаления состоит в том, чтобы установить для структуры в контейнере значение NULL и установить этот блок как доступный для вставки.снова, а также работает как маркер для функции содержит, чтобы продолжать поиск в следующей позиции.

1 Ответ

0 голосов
/ 07 июня 2018

Я подозреваю, что это ваша проблема:

HashTable->buckets[position] = NULL;

Вы имели в виду это?

HashTable->buckets[position]->info = NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...