我正在开发一个类似于平台的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;
}
如果我使用上面的方法删除所有元素,以便列表为空,则内存完全释放。但是,该列表在客户端中经常使用添加/删除操作,但它永远不会完全清空。
顺便说一下。我存储指向列表中对象的指针,如字符串。
代码有什么问题吗?提前谢谢。