C++ 我的链表实现是否正在泄漏内存?
代码:C++ 我的链表实现是否正在泄漏内存?,c++,list,memory-leaks,dynamic-allocation,C++,List,Memory Leaks,Dynamic Allocation,代码: 我说这段代码不会泄漏内存,对吗?当列表作用域时,它应该调用其析构函数,它调用next的析构函数,它调用next的析构函数,依此类推,直到调用delete 0。否您的代码不会泄漏内存。当list超出范围时,它将被删除,连锁反应将删除下一个元素,直到最后一个 但是,您的代码不尊重。因此,只要您复制构造或复制分配一个链接列表,它的下一个指针就会被复制。删除/销毁的两个副本中的第一个副本将删除该副本。另一个则与不再有效的指针一起工作,并将在sonner或以后将其删除,从而导致UB 如果你调用de
我说这段代码不会泄漏内存,对吗?当列表作用域时,它应该调用其析构函数,它调用next的析构函数,它调用next的析构函数,依此类推,直到调用delete 0。否您的代码不会泄漏内存。当
list
超出范围时,它将被删除,连锁反应将删除下一个元素,直到最后一个
但是,您的代码不尊重。因此,只要您复制构造或复制分配一个
链接列表
,它的下一个
指针就会被复制。删除/销毁的两个副本中的第一个副本将删除该副本。另一个则与不再有效的指针一起工作,并将在sonner或以后将其删除,从而导致UB 如果你调用delete
的次数与调用new
的次数相同,那么你就没事了。在这种情况下,这种情况就会发生
如果您在当前节点中,则应保留指向下一个节点的指针,然后删除当前节点
请看我在中的一个例子,其中您可以“认为”
malloc()
为new
和free()
为delete
,听起来不错。但你为什么要这么做?扔一个内存分析器来检查一下。Valgrind是一个很好的方法。它很好,直到您将太多的项放入列表中,以至于析构函数调用超过堆栈大小。
struct LinkedList {
int someData;
LinkedList* next;
LinkedList() : next(0) {}
~LinkedList() {delete next;}
};
void someFunction() {
LinkedList list;
list.next = new LinkedList;
list.next->next = new LinkedList;
list.next->next->next = new LinkedList;
// And so on...
}