下面的樸素代碼實現了一個鏈表,不打印主函數中的所有元素,一切都會好的。然而,LinkedList::printll
函數將觸發一個設置錯誤(海灣合作委員會5.3.0),這個問題涉及到適當的處理頭節點我想...鏈表中的頭節點
那麼,有沒有什麼辦法讓這段代碼的工作printll
函數的最小修改?
#include <iostream>
using namespace std;
struct Node{
int value;
Node* next;
};
struct LinkedList{
Node* head= NULL ;
void append(int);
void printll();
};
void LinkedList::append(int data){
Node* cur = head;
Node* tmp = new Node;
tmp->value = data;
tmp->next = NULL;
if(!cur){
cur = tmp; // cur-> head
}
else{
while(cur->next != NULL){
cur = cur->next;
}
cur->next = tmp;
}
std::cout<<cur->value<<std::endl; // cur-> temp
delete tmp; // comment out
}
void LinkedList::printll(){
Node* cur = head;
while(cur->next != NULL){ //
std::cout<<cur->value<<std::endl;
cur = cur->next;
}
}
int main(){
LinkedList LL;
LL.append(5);
LL.append(6);
LL.append(7);
LL.printll(); // --without this, the program is fine
return 0;
}
作爲@BoBTFish說,你必須刪除'刪除TMP;'從你的代碼(爲什麼你'delete'一個'node'剛纔添加它到'List'?),並在'printll'中改變'while'循環,建議:'while(cur)' –
我改變了@BoBTFish所提出的所有建議,而且我正在使用GCC 5.3.0進行編譯。 ,它仍然segfault ..問題發生在「cur-> next」我猜 – lorniper
@lorniper當我做了我建議的更改,我能夠編譯和正常運行。你可以發佈你的確切代碼仍然是殘疾人嗎? – BoBTFish