【问题标题】:Linked list destructor not working链表析构函数不起作用
【发布时间】:2015-01-20 12:45:39
【问题描述】:

我为一个不能正常工作的双向链表编写了一个析构函数。有一个循环来删除这些值。控制线从那个循环中出来,但程序没有完成。我的意思是,主要没有结束。

没关系,我想通了。

【问题讨论】:

  • 没有看到 main() 部分就很难说什么。
  • 卡在哪一行?

标签: c++ linked-list destructor doubly-linked-list


【解决方案1】:

首先:移动delete node; 行。 如果只存在 head 则会出错。

LinkedList::~LinkedList() {
    ListItem* node = head;
    ListItem* temp = NULL;

    if (head != NULL && head->next == NULL) {
        delete head;
    } else {
        while (node->next) {
            temp = node;
            node = node->next;
            delete temp;
        }
        delete node;
    }
}

或者删除 if 语句。

LinkedList::~LinkedList() {
    ListItem* node = head;
    ListItem* temp = NULL;

    while (node->next) {
         temp = node;
         node = node->next;
         delete temp;
    }
     delete node;
}

【讨论】:

  • 这可能会发生。 if (head != NULL && head->next == NULL) 删除头部;删除节点;
【解决方案2】:

您可以编写析构函数 cimpler。例如

LinkedList::~LinkedList() 
{
    for ( ListItem *node = head; node; ) 
    {
        ListItem *temp = node;
        node = node->next;
        delete temp;
    }

    head = nullptr;
}

或者

LinkedList::~LinkedList() 
{
    while ( head ) 
    {
        ListItem *temp = head;
        head = head->next;
        delete temp;
    }

    head = nullptr;
}

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 2013-04-26
    • 2013-03-18
    • 2012-10-15
    • 2018-03-27
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多