Я делаю модифицированный двусторонний связанный список, но голова и хвост указывают друг на друга. В insertBeforeCurrent и insertAfterCurrent я определил объекты с новыми и поместил их в связанный список. Но когда я go использую delete, программа просто вылетает. Я провел несколько тестов, и insertBeforeCurrent и insertAfterCurrent работают, и я могу через связанный список и распечатать каждый элемент с помощью getPrevious и getNext. Я также напечатал это, используя только insertBeforeCurrent, insertAfterCurrent, и я также смог сделать то же самое со смесью двух. Мне удалось распечатать его с 1,2,3 и 6 элементами в связанном списке. У меня проблема в отладчике, все работает, пока я не нажму на темп удаления; в этот момент он просто скажет. Не удается найти исходный файл по адресу "/build/glibc-t7JzpG/glibc-2.30/signal/../sysdeps/unix/sysv/linux/raise.c" Найдите файл или отредактируйте исходный путь поиска, чтобы включить его местоположение. Я знаю, что вы можете использовать функцию удаления только для удаления данных, созданных динамическим распределением памяти c, но это не так, поскольку каждый элемент связанного списка создается новым.
Таким образом, проблема со сбоем приложения заключается не в Node * x = new Node();
, за которым следует x = y;
. Они не показывают никаких предупреждений, приложение запускается, и 5 или 6 человек указали на них. Спасибо, кстати. У меня проблема именно с delete temp;
и почему она не удаляется. Я оставил код для некоторого контекста.
EDIT: I have removed the insertBeforeCurrent and insertAfterCurrent code since it is not needed.
bool CircularDoublyLinkedList::remove(int original_data)
{
Node search_data = search(original_data);
Node* temp = &search_data;
Node* current_next;
Node* current_previous;
if (temp != NULL)
{
if (temp == head)
{
current_previous = temp->getPrevious();
current_next = temp->getNext();
current_previous->setNext(current_next);
current_next->setPrevious(current_previous);
head = current_next;
temp->setNext(NULL);
temp->setPrevious(NULL);
delete temp;
current = current_next;
cout << "Delete successful." << endl;
}
else if (temp == tail)
{
current_previous = temp->getPrevious();
current_next = temp->getNext();
current_next->setPrevious(current_previous);
current_previous->setNext(current_next);
tail = current_next;
temp->setNext(NULL);
temp->setPrevious(NULL);
delete temp;
current = current_next;
cout << "Delete successful." << endl;
}
else
{
current_previous = temp->getPrevious();
current_next = temp->getNext();
current_previous->setNext(current_next);
current_next->setPrevious(current_previous);
temp->setNext(NULL);
temp->setPrevious(NULL);
delete temp;
}
return true;
}
return false;
}