修复双向链表实现中的内存泄漏

问题描述

我阅读了有关此主题的其他一些帖子,因为有很多帖子,但它们并没有真正帮助我解决问题。

我在实现双向链表时出现内存泄漏。我必须自己做,所以不能使用列表。

这是我正在使用的两个推送功能...

    template <class T>
    void dllist<T>::push_front(T val) {
    node* new_node = new node;
    new_node->value = val;
    new_node->forward = head;
    new_node->backward = nullptr;
    if (head != nullptr)
        head->backward = new_node;

    head = new_node;
    }

还有……

    template <class T>
    void dllist<T>::push_back(T val) {
    node* new_node = new node;
    new_node->value = val;
    new_node->forward = nullptr;
    if (!head)
        head = new_node;
    else {
        node* traveller = head;
        while (traveller->forward != nullptr)
            traveller = traveller->forward;
        traveller->forward = new_node;
        new_node->backward = traveller;
       }
    }

最后,这是我的析构函数

    template <class T>
    dllist<T>::~dllist() {
    node* current = head;
    while (current != nullptr) {
        node* forward = current->forward;
        delete current;
        current = forward;
        }
    }

在 main 中,我声明了一个名为 mylist 的 dllist 类型的对象,并使用一些整数值调用 push_front 和 push_back。

我正在使用 CRT 库来检查泄漏,并且每次调用 push_back 或 push_front 时都会发生泄漏。

我很困惑,因为我认为我正确地制作了析构函数。还有什么我没看到的吗?

如果有人能指出我正确的方向,我将不胜感激!

谢谢。

MRE

template<class T>
class dllist {
    struct node {
        T value;
        node* forward;
        node* backward;
    };
    node* head;
public:
    dllist(); // default constructor
    ~dllist(); // default destructor
    void push_front(T); // push element to the front of the list
    void push_back(T); // push element to the back of the list
};

int main() {
    {
        dllist<int> mylist;
        mylist.push_front(10);
        mylist.push_front(12);
        mylist.push_front(14);
        mylist.push_front(16);
        mylist.push_front(18);
        mylist.push_front(19);
        mylist.push_back(11);
        mylist.push_back(21);
        mylist.push_back(31);
        mylist.push_back(41);
        mylist.push_back(31);
        mylist.push_back(41);
        mylist.push_back(222);
    }
    _CrtDumpMemoryLeaks();
    return 0;
}

template <class T>
dllist<T>::dllist() {
    head = nullptr;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)