2014-01-13 122 views
0

我有一個控制檯應用程序從控制檯讀取一些字符數據,然後放入結構中。這個結構被用作鏈表,當它被構造時,我保持一個指向第一個列表元素的指針和一個用於遍歷列表的指針。 發生在我身上的是,當我第一次運行我的列表並將其內容寫入控制檯時,一切都正常運行。當我以後想要將我的運行指針設置爲列表的最後一個元素時,它會因c000005訪問衝突錯誤而崩潰。 我會給你我的代碼的有趣的部分:指針導致訪問衝突

struct musikdaten { 
    char interpret[150]; 
    char titel[150]; 
    struct musikdaten* next; 
}; 

打印清單的內容:我的結構

定義

while (it != NULL) { 
    cout << it->interpret << ": " << it->titel << "\n"; 
    cout << "next: " << it->next << "\n"; 
    it = it->next; 
} 

設置「它」的名單最後一個元素:

while (true) { 
    if (it->next == NULL) { 
     cout << "Assigning some memory...\n"; 
     it->next = new musikdaten; 
     break; 
    } 
    else it = it->next; 
} 

但是,這最後一部分不斷崩潰時列表包含兩個以上的元素。 注意:當從控制檯讀取內容時添加新的列表元素時,下一個指針總是被初始化爲NULL。

+0

你是什麼COUT'它 - > next', 'it-> next'可以爲空 –

+0

將NULL指針檢查放在哪裏,即使在它上面,不僅僅在它上面 - >接下來,如果它不正確,則寫出消息。我似乎無法在這裏找到任何錯誤。 – Dejan

回答

2

你應該NULL初始化next成員指示列表的末尾:

it->next = new musikdaten; 
it->next->next = NULL; 

或者添加一個默認的構造函數:

struct musikdaten { 
musikdaten() { next = NULL; /*TODO: init other members*/}  
char interpret[150]; 
char titel[150]; 
struct musikdaten* next; 
}; 
+0

非常感謝,現在工作! 我知道這是這樣的... – user3190009