Я впервые работаю со связанными списками, и мне нужно создать функцию, которая может вставлять узел в конец двусвязного списка. Пока у меня есть
void LinkedList::insertAtTail(const value_type& entry) {
Node *newNode = new Node(entry, NULL, tail);
tail->next = newNode;
tail = newNode;
++node_count;
}
Класс Node принимает значение для сохранения, значение для следующего указателя, на который нужно указывать, и значение для предыдущего указателя в этом порядке. Всякий раз, когда я пытаюсь вставить сюда узел, я получаю сообщение об ошибке, в котором говорится, что произошло необработанное исключение и было нарушение прав доступа при записи в местоположение 0x00000008.
Я не совсем уверен, что здесь происходит не так, но я предполагаю, что это как-то связано с разыменованием нулевого указателя на основе сообщения об ошибке. Я был бы очень признателен за помощь в решении этой проблемы.
РЕДАКТИРОВАТЬ:
Я должен был уточнить заранее, хвост - это указатель, указывающий на последний узел в списке. Tail-> next обращается к следующей переменной этого последнего узла, которая перед запуском функции указывает на NULL, но после ее выполнения должна указывать на новый созданный узел.
LinkedList
иNode
, поскольку в вашем первом посте не так много контекста. - person Thomas Matthews   schedule 09.10.2012tail
иtail->next
, указывающими наnewNode
? (Похоже на круговую ссылку, но я могу ошибаться.) - person Thomas Matthews   schedule 09.10.2012tail
изначально NULL? Вы не можете разыменовать его вtail->next
, пока он не укажет на первый элемент - person Jonathan Wakely   schedule 09.10.2012if (tail)
перед этимtail->next
заданием. Точно так же, где назначение заголовка на случай, если этот список чисто пустой, а хвостовая вставка - первая ?? может захотеть и этого. - person WhozCraig   schedule 09.10.2012