Aşağıdaki naif kod, ana işlevdeki tüm öğeleri yazdırmadan bağlantılı bir liste uygular, her şey iyi olur. Bununla birlikte, LinkedList::printll
işlevi ayarlanmış bir hatayı (Gcc 5.3.0) tetikleyecektir, sorun, kafa düğümünün uygun şekilde ele alınmasıyla ilgilidir.Bağlantılı listede baş düğüm
Bu kodun çalışması için herhangi bir yol var mı? printll
işlevinin en az modifikasyonu?
#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 söylediği gibi sen tmp silmek 'kaldırması gerekir;' koddan ('a' node' Yeni ilave delete' neden 'List'? 've 'printll' içinde' while' döngüsünü değiştirin, öneri: 'while (cur)' –
@BoBTFish tarafından önerilen tüm değişti ve derlemek için GCC 5.3.0 kullanıyorum, ancak , hala segfault .. problem "cur-> next" de meydana geliyor sanırım – lorniper
@lorniper Ben önerdiğim değişiklikleri yaptım, düzgün bir şekilde derleyebildim ve çalıştırabiliyordum. Hala segfaulting olan tam kodunuzu gönderebilir misiniz? – BoBTFish