C ++(Arduino)链表,删除列表中的节点时未释放内存

时间:2014-09-08 10:05:30

标签: c++ list memory linked-list arduino

我正在开发一个类似于平台的Arduino客户端,我正在尝试使用通用的LinkedList库来组织对象。该列表由以下定义的节点组成:

template<class T>
struct ListNode
{
    T data;
    ListNode<T> *next;
};

但是,在使用链接列表时遇到了内存问题。我发现在删除列表中的节点时没有释放内存,但我无法弄清楚为什么因为该元素显然已从列表中删除。此外,删除列表的最后一个节点时始终释放内存。我使用以下destroy方法删除列表中的元素:

template<typename T>
void LinkedList<T>::destroy(int index){
    if(index < 0 || index >= _size)
        return;

    if(index == 0) {
        if (_size == 1) {
            delete root->data;
            delete root;
            root=NULL;
            last=NULL;
            _size=0;
            lastNodeGot = root;
            lastIndexGot = 0;
            isCached = false;
            return;
        } else {

            ListNode<T> *tmp = root->next;
            delete root->data;
            delete root;
            root = tmp;

            _size--;
            lastNodeGot = root;
            lastIndexGot = 0;
            isCached = false;
            return;
        }
    }

    ListNode<T> *tmp = getNode(index - 1);
    ListNode<T> *toDelete = getNode(index);
    tmp->next = toDelete->next;

    delete toDelete->data;
    delete toDelete;

    if (tmp->next == NULL) {
        last=tmp;
    }

    _size--;
    lastNodeGot = tmp;
    lastIndexGot = index-1;
    isCached = false;

    return;
}

如果我使用上面的方法删除所有元素,以便列表为空,则内存完全释放。但是,该列表在客户端中经常使用添加/删除操作,但它永远不会完全清空。

顺便说一下。我存储指向列表中对象的指针,如字符串。

代码有什么问题吗?提前谢谢。

0 个答案:

没有答案