2016-04-10 6 views
1

私のクラスLinkedListのデフォルトコンストラクタを呼び出すと、他の操作が発生する前にリンクリストのヘッドノードに値を割り当てようとします。私はデバッグを介して、デフォルトのコンストラクタの命令にエラーを分離しています。すぐにC++ Linked List Struct Crashingへのポインタ

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

と呼ばれるプログラムがクラッシュします。これは、mainのデフォルトのコンストラクタを呼び出すときに発生します。私はこの問題に関連するコードのこのすべてを信じる

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; 
} 

: はここに私のクラス宣言とデフォルトコンストラクタと一緒に私の構造体宣言です。誰かがこれに光を当てることができれば、それは非常に高く評価されるだろう。

+1

'head'が他のすべての前に初期化する必要があります。これは 'LinkedList :: LinkedList'の始めに空の参照です。 –

答えて

3

LinkedList::headNodeではありません。オブジェクトを初期化しないため、オブジェクト(バイナリ、メモリ内)表現が定義されていないため、参照を解除する危険があります。

LinkedListを変更して、headメンバーを明示的に初期化してください。私は、ノードを元に戻す必要があることがわかっていない限り、単純にヒープ割り当て値(Node*)としてではなく、by-value(Node)を格納することをお勧めします。

Node*を使用する:

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