c++ - 总是用 g++ 获得有趣的段错误

标签 c++ data-structures g++

我正在研究简单的链表项目,除了 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/

相关文章:

c++ - 如何将模板化成员函数专门化为 C++ 中的模板化类?

c - 将变量分组到 C 中的结构或容器中

c++ - 通过 C++ 套接字发送 std::map<int, std::map<std::string, double>> (linux)

c++ - visual studio中qt连接sql数据库

c++ - exe中 Unresolved external symbol 错误,但dll中没有

algorithm - 平衡树的批量操作

java - 序列化二叉搜索树

g++ - 自动依赖项不适用于 eclipse CDT C++ 项目

ubuntu - zlib uncompress 在 Ubuntu 10.10 x64 (g++ -m64) 上返回 -5

c++ - 仅使用 DLL *.h 头文件构建(编译链接)应用程序代码并在运行时加载 DLL 实现(显式链接)