我有一个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;
}
}
答案 0 :(得分:9)
问题在于:
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;
}
答案 1 :(得分:2)
更改为
linked_list::~linked_list(void)
{
struct node *next;
while (first != NULL)
{
next = first->next;
delete first;
first = next;
}
}
答案 2 :(得分:0)
第一次“删除”时,实际上是清除了所有链接。现在,如果您尝试使用此方法访问其他节点,将不会产生所需的结果。
首先,您必须用其他指针指向该节点,以便仍然有一些链接,以后可以访问。