C++中的删除指针让我很困惑
Delete Pointer in C++ got me confused
**struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* Merge(ListNode* list1, ListNode* list2){//list1 2; list2 4
ListNode* result = new ListNode(0);
ListNode* travel = result;
while(list1 || list2){
cout << "hereWhile" << endl;
//cout << list1->val << list2->val << endl;
if(!list1){
travel->val = list2->val;
list2 = list2->next;
travel->next = new ListNode(0);
travel = travel->next;
}
else if(!list2){
travel->val = list1->val;
list1 = list1->next;
travel->next = new ListNode(0);
travel = travel->next;
}
else{
if(list1->val <= list2->val){
travel->next = new ListNode(0);
travel->val = list1->val;
list1 = list1->next;
travel = travel->next;
}
else{
travel->next = new ListNode(0);
travel->val = list2->val;
list2 = list2->next;
travel = travel->next;
}
}
}
cout << "travel at the end: " << (travel == result->next->next) << endl;
delete result->next->next;
//delete travel;
cout << travel->val << endl;
cout << result->val << endl;
cout << result->next->val << endl;
cout << "val: " << result->next->next->val << " end" << endl;
return NULL;
}**
在我的情况下,上面的delete方法永远不会起作用。
为了提供更多详细信息,我已经更新了整个代码。这是实现MergeSort by链表的一部分。我的测试用例是这个递归,这个Merge函数是list1={2}和list2={4},所以Merge函数被设计为返回大小为两个节点的链表{2,4}的头。
在上面的代码中,我在每个if语句中声明了一个新的节点travel->next,并将travel向前移动了一步。因此,在while循环之后,我的链表变成了{2,4,0},并且我有一个指针"travel"指向ListNode{0}。但是,它不能被删除!我尝试过"delete result->next->next"answers"delete travel",但它仍然可以返回result->next->next->val,即0!(我最后一次发言)
为什么?
我在堆内存中声明了这个新的ListNode(它是一个结构)。我想从while循环中删除这个ListNode。但我的删除永远不会奏效。也许旅行是在括号中的堆中,但在while循环之后作为堆栈内存出现,因为我在循环中声明了动态内存?
在循环中使用此项来防止内存泄漏
<pointer to struct for list2> tmp1 = list2;
list2 = list2->next;
delete tmp1;
<pointer to struct for travel> tmp2 = travel; travel = travel->next;
delete tmp2;
我有一些问题。
- 您想删除整个旅行列表还是单个节点
- 旅行的初始值是多少
- 您正在检查list1,但没有在循环中使用它。请提供更多详细信息
我假设您需要删除整个travel列表(list1),travel是list1的迭代器。
travel = list1;
while(list1 != NULL)
{
list1 = list1->next;
delete travel;
travel = list1->next;
}
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存