2016-02-19 31 views
-2

我試圖通過它創建一個簡單的鏈接列表和變量。不過,我在一個我認爲不會得到的地方開了段錯誤。這裏是我的代碼C++ - 創建鏈接列表時出現段錯誤

#include <iostream> 
    #include <string> 
    using namespace std; 

    struct Node { 
    string name; 
    Node *next; 
    }; 

    int main() { 
    Node *one; 
    one->name = "one"; 
    Node *two; 
    two->name = "two"; 
    Node *three; 
    three->name = "three"; 

    Node *reader = one; 
    while (reader != NULL) { 
     cout << reader->name << endl; 
     reader = reader->next; 
    } 
    } 

我增加了一些COUT的在我的代碼,並意識到段錯誤是後

one->name = "one"; 

我不是很用C++經歷了發生的事情,但我認爲發生了段錯誤時,堆棧在內存中溢出。我不明白該程序應該如何在那裏耗盡內存。 我很感激任何幫助找出問題。謝謝。

+2

您從未爲您的'node *'指針分配內存。 –

+0

你需要更少的星星,更少的矩形和莫爾圓點。 –

+0

*我對C++不是很有經驗* - 那麼得到一本好的C++書籍並通讀這些示例是一個不錯的主意,通過這些示例瞭解所有內容。你正在犯一個根本性的錯誤,沒有好書可以說明。 – PaulMcKenzie

回答

2

您創建了一個指向節點的指針,但是您從不創建節點對象。

使用

Node* one = new Node(); 

,並在程序的最後不要忘了delete one;

基本上你已經爲指向Node的指針分配了內存,但內容是內存中的一些隨機地址。您需要實際創建一個Node對象並將其地址指定給您的指針。如果沒有,你試圖解引用一個隨機地址。 (將其與int i;進行比較,如果未初始化,它將隨機保存int