Ich versuche, einen Knoten durch seine Position zu löschen, und der Zeilenlöschpunkt im folgenden Code verursacht den seg-Fehler, ich habe versucht, dies herauszufinden für eine Weile, aber ich habe nicht geantwortet. Hier ist die Methode remove:C++ - Das Löschen eines Knotens in der doppelt verketteten Liste verursacht einen Segmentierungsfehler
void* List::remove(long index){
if(index > this->size-1){
return NULL;
}
else {
long i = 0;
List::ListItem *item = this->head;
while(i <= this->size-1){
if(index == 0){
item->getNext()->setPrev(NULL);
this->head = item;
this->size--;
delete item;
break;
}
else if(indexOf(item->getData()) == index){
item->getPrev()->setNext(this->head->getNext());
item->getNext()->setPrev(this->head->getPrev());
this->size --;
break;
}
else {
item = item->getNext();
i++;
}
}
}
return NULL;
}
Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –
Auch dieser Algorithmus ist es nicht wert, in einer verketteten Listenimplementierung hinzugefügt zu werden. Nicht was für Listen sind. – DeiDei
@DeiDei Was ist falsch an meinem Algorithmus? Könnten Sie bitte genauer sein? –