在末尾插入链表节点但程序一直崩溃

Insert node of linked list at the end but program keep crashing

正如标题所说,我试图在末尾插入链表的节点但是C++ 程序不断崩溃

class SymbolTable
{
  struct Node
  {
    string id;
    int num;
    string str;
    Node *next;
  };

public:
  SymbolTable() {}
  void insert(string id);

private:
  Node head = { "head", -99, "", nullptr};
};



void SymbolTable::insert(string id)
{
  Node *traverser = &(this->head);
  while (traverser != nullptr) { traverser = traverser->next; }

  Node *newNode = new Node();
  newNode->id = id;
  newNode->next = nullptr;
  traverser->next = newNode; // --> Crashing
}

我没有发现任何问题。

回答:

traverser != nullptr 应该是 traverser->next != nullptr

我确实发现了一些问题,首先是在-class 定义中,您将函数插入声明为:

void insert(string id, string type);

但是,当您在函数外部声明一个函数时,您跳过了第二个参数:

void SymbolTable::insert(string id);

我什至不明白这段代码是如何编译的。 我还修复了算法本身:

void SymbolTable::insert(string id)
{
    Node* traverser = &(this->head);
    while (traverser->next != nullptr) //used to be (traverse !=nullptr)
    { 
      traverser = traverser->next;
    }

    Node* newNode = new Node();
    newNode->id = id;
    newNode->next = nullptr;
    traverser->next = newNode; 
}

问题是您检查的是遍历器是否为空,而不是检查遍历器的下一个是否为空。因此,您指的是遍历器,它是一个空指针。插入这个小修复代码后编译就好了。