Dies ist meine erste Frage hier und mein Englisch ist nicht sehr gut, also bitte bitte mit mir.Verknüpfte Liste: Segmentierungsfehler Fehler beim Zuweisen eines Wertes zum nächsten Teil eines Knotens
Ich versuche, eine verkettete Liste mit einer Funktion zu erstellen, um ein Element an einer bestimmten Position einzufügen. Um dies zu tun, muss ich PREDPTR positionieren, aber ich habe Schwierigkeiten, es zu tun, denn immer, wenn ich das Programm starte, bekomme ich immer einen Segmentierungsfehler. Ich glaube, der Fehler ist in "predptr-> next = first;" Teil in der Funktion insert(), aber wenn ich predptr (die obige Zeile) auf "predptr = new Node()" setze, funktioniert es, aber es löst immer den zweiten Fall in der Insert-Funktion aus.
Hier ist der Code:
//Class List
class List
{
private:
//Class Node
class Node
{
public:
string data;
Node * next;
//Node constructor
Node()
{
data = "";
next = 0;
}
//Node constructor with value
Node(string val)
{
data = val;
next = 0;
}
};
int mySize;
Node * first;
public:
//List constructor
List()
{
mySize = 0;
first = 0;
}
//Insert Function
void insert(string val, int pos)
{
Node * newptr, * predptr;
newptr = new Node(val);
predptr = new Node();
predptr->next = first;
cout << "Pred: " << newptr->data << endl;
//Position predptr
for(int i = 0; i < pos; i++)
predptr = predptr->next;
//CASE 1: Inserting at the middle or end of the List
if(predptr != 0)
{
cout << "NF" << endl;
newptr->next = predptr->next;
predptr->next = newptr;
}
//CASE 2: Inserting at the beginning of the List
else
{
cout << "F" << endl;
newptr->next = first;
first = newptr;
}
delete predptr;
mySize++;
}
int main()
{
List a;
cout << (a.empty() ? "Yes" : "No") << endl;
cout << "Inserting 5 elements..." << endl;
a.insert("Asus", 1);
a.insert("Acer", 2);
a.insert("Sony", 3);
a.insert("Toshiba", 4);
cout << "List A: ";
a.display();
cout << endl;
return 0;
}
Die Methoden 'empty' und' display' fehlen. Wenn Zeilen, die diese Methoden aufrufen, auskommentiert sind, funktioniert alles einwandfrei. Also ist bei einer dieser Methoden wahrscheinlich etwas nicht in Ordnung. Ohne Code ist es unmöglich, den Bug zu finden – alexeykuzmin0
predptr = predptr-> next; Was passiert, wenn Sie eine Pos und predptr-> nächste übergeben ist nicht gültig? - pos ist nicht an die Liste in diesem Code gebunden. –