'Adding a node to the beginning of a double-linked list

I am trying to create a function that adds a node to the beginning of a double-linked list in C++, and I'm getting this error in Xcode. I know it must be because I lost the address of one of my temp nodes, but I cannot figure out how to fix it.

template<typename Item>
void DLList<Item>::push_front(const Item &item) {

    /*  Adds item to a new Node at the front of the list. Updates head,
     tail, and size accordingly. Must appropriately handle cases in which the list is empty  */
        Node*p = new Node;
        p -> item = item;
        Node*oldHead = head;
        p -> next = oldHead;
        oldHead -> prev = p; /*error message: Thread 1: EXC_BAD_ACCESS (code=1, address=0x10)*/
        head = p;
        size ++;
}


Solution 1:[1]

The error will happen when oldHead is nullptr, and then oldHead->prev is an invalid access. This happens when the list is empty (head is nullptr).

It is easy to fix: just make sure you only execute that statement when the list is not empty. NB: you don't actually need oldHead. Just keep working with head.

And as the comment in your code seems to suggest your list has a tail member, you should set it when the first node is added to the list:

    Node* p = new Node;
    p -> item = item;
    p -> next = head;
    if (head != nullptr) {
        head -> prev = p;
    } else {
        tail = p;
    }
    head = p;
    size ++;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1