0

我有一个linked_list,目前我的析构函数不能正常工作。不完全确定为什么。有人可以解释我如何解决这个问题吗?

class linked_list {
 private:

struct node
{
    // String in this node
    std::string data;

    // Pointer to next node
    struct node *next;
};

//First item in the list
struct node *first;

这是我的析构函数

linked_list::~linked_list(void)
{
while (first)
{
    delete first;
    first = first->next;
}
}
4

3 回答 3

9

问题出在这里:

delete first;
first = first->next;

当你删除first的时候,然后尝试访问first->next。缓存first->next到 type 的临时变量中node*,然后delete first修复此问题:

struct node* temp;
while (first != NULL)
{
    temp = first->next;
    delete first;
    first = temp;
}
于 2013-03-28T01:48:10.380 回答
2

改成

 linked_list::~linked_list(void)
{
struct node *next;
while (first != NULL)
{
    next = first->next;
    delete first;
    first = next;
}
 }
于 2013-03-28T01:51:39.867 回答
0

当您首先“删除”时,实际上是从其中清除了所有链接。现在,如果您尝试使用它访问其他节点,将不会产生所需的结果。

首先,您必须使用其他指针指向该节点,以便您仍然有一些链接可以稍后访问。

于 2020-05-15T05:45:57.663 回答