Итак, у меня есть эта функция вставки для двусвязного списка, которая работает по большей части только до тех пор, пока я не попытаюсь вставить новый узел по заданному индексу. У меня возникли проблемы с правильной привязкой его к узлам до и после него, если кто-нибудь может понять, почему, я продолжаю получать ошибки, когда пытаюсь назначить одну из точек, которые я укажу в коде:
void insert(int index, ItemType& item)
{
int pos = 0;
Node* current = new Node;
Node* n = new Node;
n->info = item;
if (index >= 0 && index <= size)
{
if (size == 0)
{
head = n;
tail = n;
n->next = NULL;
n->prev = NULL;
size++;
return;
}
else if (index == 0)
{
n->prev = NULL;
n->next = head;
head->prev = n;
head = n;
size++;
return;
}
else if (index == size)
{
n->next = NULL;
n->prev = tail;
tail->next = n;
tail = n;
size++;
return;
}
else if (index < size/2)
{
current = head;
while(pos != index)
{
current = current->next;
pos++;
}
}
else if (index > size/2)
{
int endpos = size - 1;
current = tail;
while(endpos != index)
{
current = current->prev;
endpos--;
}
}
n->next = current;
current->prev->next = n; // HERE is where the code breaks, don't know why.
n->prev = current->prev;
current->prev = n;
size++;
}
}
Таким образом, код прерывается на операторе current->prev->next = n, в котором говорится, что существует место записи нарушения прав доступа. Поэтому я не уверен, правильно ли это закодировано или я напутал в назначении указателей в более раннем коде. Если кто-нибудь знает, почему это происходит, и может указать мне правильное направление, это было бы здорово. Спасибо.