0

I have a small code snippet for deleting element in linked list. Here is the code:

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

Can you please explain to me, why this code works. It deletes the head and sets the head to the next element.

When I saw this I thought that this will not work but it works.

4

3 に答える 3

7

It's undefined behavior, so anything can happen, including appearing to work.

When you call delete, you're releasing the memory back to the OS. There's no guarantee that whatever is there is deleted or cleared. So the memory can remain the same as before the delete, but that's just by chance. Accessing it results in undefined behavior.

A proper approach for this would be:

if (head->data ==  num) {
    aux = head;
    head = head->next;
    delete aux;
}
于 2012-06-21T11:07:42.353 に答える
2

OSはメモリセグメントの無効化を延期する可能性があります。小さなメモリ部分を削除するのは堅牢ではないことがわかります。さらに、1つのメモリセグメントしか使用できないため、一度削除する方が効果的です。

于 2012-06-21T11:12:03.060 に答える
0

すでに削除または解放されているメモリからデータにアクセスすることをお勧めするわけではありません。動作する場合もありますが、動作は定義されていません。

于 2012-06-24T07:10:36.353 に答える