dep*_*oul 0 c++ linked-list delete-operator
我有一个小代码片段用于删除链表中的元素.这是代码:
if (head->data == num) {
delete head;
head = head->next;
}
Run Code Online (Sandbox Code Playgroud)
你可以向我解释一下为什么这段代码有效.它删除头部并将头部设置为下一个元素.
当我看到这个时,我认为这不起作用,但它有效.
这是未定义的行为,所以任何事情都可能发生,包括出现在工作中.
当您调用delete时,您将内存释放回操作系统.无法保证删除或清除任何内容.因此记忆可以保持与之前相同delete,但这只是偶然的.访问它会导致未定义的行为.
一个适当的方法是:
if (head->data == num) {
aux = head;
head = head->next;
delete aux;
}
Run Code Online (Sandbox Code Playgroud)