Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链表的析构函数_C++_Linked List_Destructor - Fatal编程技术网

C++ 链表的析构函数

C++ 链表的析构函数,c++,linked-list,destructor,C++,Linked List,Destructor,我有一个链接列表,目前我的析构函数工作不正常。不完全清楚原因。 有人能告诉我怎么解决这个问题吗 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; 这是我的析构

我有一个链接列表,目前我的析构函数工作不正常。不完全清楚原因。 有人能告诉我怎么解决这个问题吗

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->next
时。将
first->next
缓存到
node*
类型的临时变量中,然后执行
delete first
以修复此问题:

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

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

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


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

所以只要翻转它就可以了?@user1665569你还需要一个指向下一个元素的临时指针,否则当你先删除
时它将永远丢失