Уже поздно, и я немного устал, но то, что я вижу, это дополнительная разыменование.
Первое: OBJKT *hash_tbl[]
- это уже массив указателей на связанные списки.
Поэтому, когда вам нужен заголовок списка, вы просто используете hash_tbl[index]
, это даст вам указатель, который должен бытьприсвоено вам thisObject->o_hash_next
, что тоже указатель.НЕ разыскивать.*thisObject->o_hash_next = *hash_tbl[hashindex]
копирует значение с одного адреса на другой, и это не то, что вы хотите, я предполагаю.То же самое относится и к предыдущему указателю.
Ваше решение может выглядеть следующим образом:
void insert_in_hash(int hashindex, OBJKT *thisObject)
{
thisObject->o_hash_next = hash_tbl[hashindex];
hash_tbl[hashindex]->o_hash_prev = thisObject;
thisObject->o_hash_prev = NULL; // Don't forget to NULL if not in use
}
Последняя строка была удалена, поскольку вы обычно не следите за заголовком списка..
В любом случае, как я уже сказал, уже поздно, и у меня не было времени протестировать мой код, но вот полезная ссылка на учебное пособие по связанному списку: Учебное пособие по связанному списку C / C ++
Редактировать
Вы должны держать заголовок списка, как вы это делали в своем коде: hash_tbl[hashindex] = thisObject
.Смотрите комментарии ниже