链表的析构函数



我有一个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;
}
}

问题在这里:

delete first;
first = first->next;

删除first,但又试图访问first->next。将first->next缓存到node*类型的临时变量中,然后执行delete first来修复此问题:

struct node* temp;
while (first != NULL)
{
    temp = first->next;
    delete first;
    first = temp;
}

change to

 linked_list::~linked_list(void)
{
struct node *next;
while (first != NULL)
{
    next = first->next;
    delete first;
    first = next;
}
 }

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

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

相关内容

  • 没有找到相关文章

最新更新