创建链接列表时出现访问冲突错误

时间:2015-03-20 08:31:22

标签: c++ class visual-c++ linked-list

尝试创建内联列表。我在LinkedList.cpp文件中创建的deleteNode函数中遇到问题。遇到错误

  

LinkedList.exe中0x00D04C3C处的未处理异常:0xC0000005:   访问冲突读取位置0x00000004。

previous->link = temp->link;

LinkedList.h文件

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到这里

2 个答案:

答案 0 :(得分:0)

看起来temp不能在给出错误的行上为nullpointer,但之前可能是。

重要提示:请注意该行

else if (count = position + 1)

实际上是一项任务。你可能意味着

else if (count == position + 1)

之前的if语句也是如此。

干杯!

答案 1 :(得分:0)

我发现这里有很多错误,其中任何一个都可能导致你的问题。如果他们没有修复它,我可以再看看是否有其他人没有先找到它。

首先,删除函数中的if语句将始终执行。因为您要分配而不是检查相等性,即'='而不是'=='。仅这一点就可以解决问题。

跳出页面的另一件事是你显然是动态地分配每个节点,你的删除功能应该在你完成后删除内存。

先修复这两个,然后看看你在哪里。