Access violation error while creating linked list

-1

Trying to create Lined List. I am having problem in the deleteNode function created in LinkedList.cpp file. Experiencing given error

Unhandled exception at 0x00D04C3C in LinkedList.exe: 0xC0000005: Access violation reading location 0x00000004.

previous->link = temp->link;

LinkedList.h file

class Node
{
public:
    int data;
    Node *link;
};
class LList
{
private:
Node *Head, *Tail;
//void recursiveTraverse(Node *);
public:
    LList();
    ~LList();
    void create();
    Node *getNode();
    void append(Node *);
    void insert(Node *, int);
    void rtraverse();
    void deleteNode(int);
    void display();
};

LinkedList.cpp

    #include "stdafx.h"
#include "LinkedList.h"
#include <iostream>
using namespace std;
LList::LList()
{
    Head = nullptr; Tail = nullptr;
}
LList::~LList()
{
    Node *Temp;
    while (Head != nullptr)
    {
        Temp = Head;
        Head = Head->link;
        delete Temp;
    }
}
void LList::create()
{
    char choice;
    Node *newNode = nullptr;

    while (5)
    {
        cout << "Enter Data in the List (Enter N to cancel) ";
        cin >> choice;
        if (choice == 'n' || choice == 'N')
        {
            break;
        }
        newNode = getNode();
        append(newNode);

    }

}

Node *LList::getNode()
{
    Node *temp = new Node;
    //cout << "Enter Data in the List";
    cin >> temp->data;
    temp->link = nullptr;
    return temp;
}
void LList::append(Node *temp)
{
    if (Head == nullptr)
    {
        Head = temp;
        Tail = temp;
    }
    else
    {
        Tail->link = temp;
        Tail = temp;
    }
}
void LList::display()
{
    Node *temp = Head;
    if (temp == nullptr)
    {
        cout << "No Item in the List" << endl;
    }
    else
    {
        while (temp != nullptr)
        {
            cout << temp->data << "\t";
            temp = temp->link;
        }
        cout << endl;
    }
}
void LList::insert(Node *newNode, int position)
{
    int count = 0; Node  *temp, *previous = nullptr;
    temp = Head;
    if (temp == nullptr)
    {
        Head = newNode;
        Tail = newNode;
    }
    else
    {
        while (temp == nullptr || count < position)
        {
            count++;
            previous = temp;
            temp = temp->link;
        }
        previous->link = newNode;
        newNode->link = temp; 
    }

}
void LList::deleteNode(int position)
{
    int count = 1; Node * temp, *previous = nullptr;
    temp = Head;
    if (temp == nullptr)
    {
        cout << "No Data to delete." << endl;
    }
    else
    {
        while (count <= position + 1)
        {
            if (position == count + 1)
            {
                count++;
                previous = temp;
                previous->link = temp->link;
            }
            else if (count == position + 1)
            {
                count++;
                previous->link = temp->link;
            }
            count++;
            temp = temp->link;
        }
    }
}

Main.cpp goes here

c++
class
visual-c++
linked-list
asked on Stack Overflow Mar 20, 2015 by Talha Junaid • edited Jan 29, 2018 by Talha Junaid

2 Answers

0

Looks like temp cannot be a nullpointer at the line giving an error, but previous might be.

Important: Note that the line

else if (count = position + 1)

Is actually an assignment. You probably meant

else if (count == position + 1)

The same goes for the if statement before that.

Cheers!

answered on Stack Overflow Mar 20, 2015 by Bas in het Veld
0

I see multiple things wrong here, any one of which could be causing your problem. If they don't fix it I could take another look if someone else doesn't get to it first.

First and foremost, your if statements in your delete function will always execute. Because you are assigning instead of checking for equality, ie '=' instead of '=='. This alone may fix the issue.

The other thing that jumps out of the page is that you are obviously dynamically allocating each node, and your delete function should be delete'ing the memory once you are done with it.

Fix those two first and then see where you are at.

answered on Stack Overflow Mar 20, 2015 by Ron Thompson

User contributions licensed under CC BY-SA 3.0