【发布时间】:2016-03-25 06:43:18
【问题描述】:
我想创建一个自己的 List 类,每个节点都有一个值(double)。将节点添加到列表后,我想获得列表的正确长度 (1),但它只是在我的 Node::getNext() 方法中显示“分段错误”。
这是我的代码:
#include <iostream>
#include <cassert>
using namespace std;
class List{
private:
class Node{
public:
Node(double value){
this->value = value;
this->setNext(nullptr);
}
Node* getNext(){
return next;
}
void setNext(Node* myNode){
this->next = myNode;
}
private:
double value;
Node* next;
};
Node *head;
public:
List(){
head = nullptr;
}
int length(){
int length = 0;
if (head == nullptr)return length;
else{
Node *pointer = head;
do {
pointer = pointer->getNext();
length++;
} while (pointer->getNext() != nullptr);
}
return length;
}
void pushback(double value){
if (head == nullptr)head = new Node(value);
else{
lastNode()->setNext(new Node(value));
}
}
Node* lastNode(){
Node* end = head;
while(end->getNext() != nullptr){
end = end->getNext();
}
return end;
}
};
class TestList{
public:
void run(){
testListConstructor();
testAddOneNodeToList();
//testAddSecondNodeToList();
}
private:
void testListConstructor(){
List myList;
assert(0 == myList.length());
}
void testAddOneNodeToList(){
List myList;
myList.pushback(1.5);
assert(1 == myList.length());
}
void testAddSecondNodeToList(){
List myList;
myList.pushback(1.5);
cout << myList.lastNode();
myList.pushback(2.5);
assert(2 == myList.length());
}
};
int main(void){
TestList tl;
tl.run();
cout << "Main-Function abgearbeitet" << endl;
return 0;
}
我在 getNext 方法中做错了什么?为什么会出现分段错误?
【问题讨论】:
标签: c++ list segmentation-fault