C++列表中的分段错误
Segmentation fault in C++ List
我想创建一个自己的List类,每个节点都有一个值(double)。在我向列表中添加了一个节点后,我想获得列表的正确长度(1),但它只是在我的node::getNext()方法中显示"Segmentation Error"。
这是我的代码:
#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方法出错了什么?为什么我会出现分段错误?
由于一直在调用pointer = pointer->getNext()
,因此必须检查pointer
是否为nullptr
,作为do-while子句的条件。
或者只是做一些类似的事情:
len = 0;
curr = head
while (curr != nullptr) {
++len;
curr = curr.next
}
您在这里使用的是nullptr
Node *pointer = head;
do{
pointer = pointer->getNext(); \ (1)
length++;
}while (pointer->getNext() != nullptr);
因为当您到达最终列表节点时,(1)之后的pointer
的值将为nullptr
。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?