C++ 为什么我不能删除Linkedlist节点?
我想从Arraylist创建linkedList。我使用新的curNode并给出值,但当我想在使用后删除它时,它是错误的。为什么我不能删除curNodeC++ 为什么我不能删除Linkedlist节点?,c++,C++,我想从Arraylist创建linkedList。我使用新的curNode并给出值,但当我想在使用后删除它时,它是错误的。为什么我不能删除curNode struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *addListNode(int* arr,int n){ ListNode *head=NULL,*curNode,*t
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *addListNode(int* arr,int n){
ListNode *head=NULL,*curNode,*tail;
for(int index=0;index!=n;++index){
curNode = new ListNode(arr[index]);
if (head==NULL)
head=curNode;
else
tail->next=curNode;
tail = curNode;
//delete curNode;
}
return head;
}
实际上,您正在分配指针,而不是值:
head=curNode代码>,tail->next=curNode代码>,tail=curNode代码>。
因此,您不应该删除同一个指针,因为它将释放新创建的ListNode元素所指向的内存
您应该在使用返回的ListNode或更好的ListNode析构函数后删除分配的内存。还可以考虑使用智能指针(例如:代码> STD::UnQuyJPPT),以确保分配的内存将在不再使用时自动释放。什么意思,这是错误的吗?发生了什么?执行删除操作时,您正在删除刚刚创建的节点(释放指针curNode下的内存,也释放head/tail下的内存)。当您从列表中删除节点时,您可以将其删除。如果要删除java中的节点,您可以使用迭代器删除迭代器。因为您存储的是指针,所以您没有使用它,所以不应该删除任何内容。(它是“数组”,而不是“数组列表”。)