总是用 g++ 得到有趣的分段错误

Always getting interesting Segmentation Fault with g++

我正在做一个简单的链表项目,除 List class 析构函数外,一切正常。我试图删除列表中的每个节点,但 g++ 每次都会抛出分段错误(即使是空析构函数)。有人可以帮助我,我的代码有什么问题吗?谢谢!

我的清单header;

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";

}

抛出分段错误。列表总是填满所以我不检查头部是否为空

您还没有在任何地方初始化 currNode,所以当您这样做时:

if(!currNode) {

第一次调用 insertF 时,currNode 的这种使用会调用未定义的行为。

您应该像这样初始化所有成员:

Node* head = nullptr;
Node* currNode = nullptr;

您在未初始化的情况下使用成员变量 headcurrNode 的值调用了 未定义的行为

像这样初始化它们:

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";
}