Ваш код имеет серьезные проблемы, которые приводят к неопределенному поведению.
Два из них являются результатом этой строки:
node **HASHTABLE = malloc(sizeof(node) * 26);
, которая выделяет 26 node
структуры , но переменная HASHTABLE
ожидает адрес указателя на массив node *
указателей (это **
в объявлении node **HASHTABLE
).
Итак, вы должны заменить его на что-то вроде:
node **HASHTABLE = malloc( 26 * sizeof( *HASHTABLE ) );
Обратите внимание, что я использовал разыменованное значение переменной, присваиваемой - HASHTABLE
.В данном случае это означает node
(на один *
меньше, чем в объявлении).Поэтому, если тип HASHTABLE
изменяется, вам не нужно вносить какие-либо другие изменения в оператор malloc()
.
Эта проблема, хотя и технически неопределенное поведение, скорее всего, не вызовет никаких проблем.
Однако с
node **HASHTABLE = malloc( 26 * sizeof( *HASHTABLE ) );
по-прежнему существует проблема, которая вызовет проблем - и серьезных.
Этот массив из 26 указателей неинициализировано - вы не знаете, что в них .Они могут указывать куда угодно.Так что это не будет работать хорошо, если вообще:
if (HASHTABLE[table] == NULL)
Это означает, что это указывает на неизвестное место:
HASHTABLE[table]->next = newnode;
И , что вызовет все видыпроблем.
Самое простое решение?Инициализируйте все значения до нуля, используя calloc()
вместо malloc()
:
node **HASHTABLE = calloc( 26, sizeof( *HASHTABLE ) );
Пока это не исправлено, любые результаты всей вашей программы в лучшем случае сомнительны.