我想创建一个自己的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方法中出错了什么?为什么我会出现分段错误?
答案 0 :(得分:1)
由于您曾致电pointer
,因此必须检查nullptr
是len = 0;
curr = head
while (curr != nullptr) {
++len;
curr = curr.next
}
是否属于您的行动条款。
或者只是做一些事情:
public partial class Child : Form
{
public event DatabaseChangeHandler DatabaseChanged;
public delegate void DatabaseChangeHandler(string newDatabaseName);
public Child()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//When the database changes
if (this.DatabaseChanged != null)
{
this.DatabaseChanged("The New Name");
}
}
}
答案 1 :(得分:1)
你在这里使用了nullptr
Node *pointer = head;
do{
pointer = pointer->getNext(); \\ (1)
length++;
}while (pointer->getNext() != nullptr);
当您已到达最终列表节点时,(1)之后pointer
的值将为nullptr
。