使用删除没有逻辑

时间:2012-06-21 11:07:09

标签: c++ linked-list delete-operator

我有一个小代码片段用于删除链接列表中的元素。 这是代码:

if (head->data ==  num) {
    delete head;
    head = head->next;
}

请您解释一下为什么这段代码有效。它会删除头部并将头部设置为下一个元素。

当我看到这个时,我认为这不起作用,但它有效。

3 个答案:

答案 0 :(得分:7)

这是未定义的行为,所以任何事情都可能发生,包括出现在工作中。

当您调用delete时,您将内存释放回操作系统。无法保证删除或清除任何内容。所以内存可以保持与delete之前相同,但这只是偶然的。访问它会导致未定义的行为。

适当的方法是:

if (head->data ==  num) {
    aux = head;
    head = head->next;
    delete aux;
}

答案 1 :(得分:2)

操作系统可以推迟内存段的无效。你发现删除微小的内存部分并不健壮,你只能使用一个内存段,所以删除它一次会更有效。

答案 2 :(得分:0)

从存储器中删除或释放数据并不是完全可取的。有时它可能有效,但行为未定义。