【发布时间】:2017-04-02 09:07:49
【问题描述】:
我尝试编写删除双链表中节点的函数。 但是我在第一个条件下堆叠 nodeToDelete 也是头。 当我免费使用该代码时(nodeToDelete)不要释放nodeToDeleteBut nodeToDelete->nextNode;
有什么帮助吗?
已编辑:删除也不起作用见截图 -> https://s22.postimg.org/dff43kn9d/slide.jpg
编辑
void deleteNode(node *&head, int value)
修复我的代码谢谢。
void deleteNode(node *head, int value)
{
node* nodeToDelete = head;
while(nodeToDelete != NULL)
{
if(nodeToDelete->value == value)
{
if(nodeToDelete == head)
{
head = nodeToDelete->nextNode;
head->previousNode = NULL;
delete nodeToDelete;
return;
}
}
nodeToDelete = nodeToDelete->nextNode;
}
}
【问题讨论】:
-
如果你必须手动分配内存,你真的应该在 C++ 中使用
new和delete。malloc和free不适用于 C++ 中的非标准布局类类型。 -
请学习如何使用调试器,以及如何逐行执行代码。
-
天哪!谢谢 !!!我使用 new 进行内存分配。应该使用 delete insted of free。
-
画出你想要做的事情并检查你的逻辑是否有效。如果确实如此,请逐行调试程序。
-
这可能是问题所在,因为将 free() 与 new 一起使用的行为可能出乎意料。请看:Post
标签: c++ memory-management free doubly-linked-list