我正在研究简单的链表项目,除了 List 类析构函数之外一切正常。我试图删除列表中的每个节点,但 g++ 每次都会抛出段错误(即使是空的析构函数)。有人可以帮助我,我的代码有什么问题吗?谢谢!。
我的列表标题;
struct Node{
double data;
Node* next;
};
class List{
public:
List();
~List();
void insertF(double data);
void printList();
private:
Node* head;
Node* currNode;
};
列出源文件;#include "List.h"
List::List(){
std::cout<<"Constructed Linked List";
}
void List::insertF(double dataX){
Node* nn = new Node;
if(!currNode){
head = nn;
nn->data=dataX;
currNode = nn;
}else{
currNode->next = nn;
nn->data = dataX;
currNode = nn;
}
}
void List::printList(){
Node* walker = head;
while(walker){
std::cout<<walker->data;
std::cout<<"----->";
walker = walker->next;
}
}
List::~List(){
Node* currNode = head, *nextNode = NULL;
while(currNode != NULL){
nextNode = currNode->next;
delete currNode;
currNode = nextNode;
}
std::cout<<"sd";
}
主要的;#include "List.h"
using namespace std;
int main(){
List list;
list.insertF(3.0);
list.insertF(4.0);
list.printList();
}
甚至;
List::~List(){
std::cout<<"sd";
}
引发段错误。列表总是被填满,所以我不检查头部是否为空
最佳答案
您通过使用成员变量 head
的值调用了未定义的行为和 currNode
没有初始化。
像这样初始化它们:
List::List(){
head = nullptr; // add this
currNode = nullptr; // add this
std::cout<<"Constructed Linked List";
}
或者像这样:List::List() : head(nullptr), currNode(nullptr) { // add member initialization list
std::cout<<"Constructed Linked List";
}
关于c++ - 总是用 g++ 获得有趣的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63317840/