次のナイーブなコードは、リンクされたリストを実装していますが、main関数のすべての要素を出力せずにすべて正常です。しかし、LinkedList::printll
関数はセットフォルト(Gcc 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を削除する '削除する必要があります;'あなたがコードから(あなたが '' node'追加したDELETE'されている理由'print'の' while'ループを変更してください: 'while(cur)' –
@BoBTFishで提案されているものをすべて変更しましたが、GCC 5.3.0を使ってコンパイルしています、それはまだsegfault .. "cur-> next"で問題が発生すると思います – lorniper
@lorniper私が提案した変更を行ったとき、私は正しくコンパイルして実行することができました。あなたはまだsegfaultingであるあなたの正確なコードを投稿できますか? – BoBTFish