在末尾插入链表节点但程序一直崩溃
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;
}
问题是您检查的是遍历器是否为空,而不是检查遍历器的下一个是否为空。因此,您指的是遍历器,它是一个空指针。插入这个小修复代码后编译就好了。
正如标题所说,我试图在末尾插入链表的节点但是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;
}
问题是您检查的是遍历器是否为空,而不是检查遍历器的下一个是否为空。因此,您指的是遍历器,它是一个空指针。插入这个小修复代码后编译就好了。