2016-04-10 12 views
1

Wenn ich den Standardkonstruktor für meine Klasse LinkedList aufruft, versuche ich, dem Kopfknoten der verketteten Liste Werte zuzuordnen, bevor irgendwelche andere Operationen auftreten. Ich habe den Fehler über Debugging auf die Anweisungen im Standardkonstruktor isoliert. SobaldC++ - Verknüpfter Listenzeiger auf Struct Crashing

head -> next = NULL; 
    head -> RUID = 0; 
    head -> studentName = "No Student in Head"; 

aufgerufen werden, stürzt das Programm ab. Dies tritt auf, wenn ich den Standardkonstruktor in main aufruft. Hier ist meine Klassendeklaration und meine Strukturdeklaration zusammen mit dem Standard-Konstruktor:

struct Node 
{ 
    string studentName; 
    int RUID; 
    Node* next; 
}; 

class LinkedList 
{ 
private: 

    // Initialize length of list 
    int listLength; 

public: 
    // Head of the list, which points to no data yet 
    Node *head; 
    LinkedList(); 
    bool insertNode(Node* newNode, int position); 
    int generateRUID(); 

}; 


LinkedList::LinkedList() 
{ 

    head -> next = NULL; 
    head -> RUID = 0; 
    head -> studentName = "No Student in Head"; 

    listLength = 0; 
} 

Ich glaube, das alle relevanten Code zu diesem Thema. Wenn jemand Licht dazu bringen könnte, würde es sehr geschätzt werden.

+1

'head' muss vor allen anderen initialisiert werden. Es ist eine leere Referenz am Anfang von 'LinkedList :: LinkedList'. –

Antwort

3

LinkedList::head ist ein Node*, keine Node und Sie es nicht initialisiert werden, so dass das Objekt (binär, in-memory) Darstellung ist nicht definiert und ist daher gefährlich zu dereferenzieren.

Ändern Sie LinkedList, um das head Mitglied explizit zu initialisieren. Ich empfehle, es by-value (wie Node) lieber als einen Heap-zugewiesenen Wert (Node*) für einfach zu speichern, es sei denn, Sie wissen, dass Sie Knoten erneut zu reparieren müssen.

Mit Node*:

LinkedList::LinkedList() : 
    head(Node()), 
    listLength(0) 
{ 
    this->head->next = nullptr; 
    this->head->RUID = 0; 
    this->head->studentName = "No Student in Head"; 
}