创建链表时访问冲突错误

Posted

技术标签:

【中文标题】创建链表时访问冲突错误【英文标题】:Access violation error while creating linked list 【发布时间】:2015-03-20 08:31:21 【问题描述】:

尝试创建内联列表。我在 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 放在这里

【问题讨论】:

【参考方案1】:

我发现这里有多个问题,其中任何一个都可能导致您的问题。如果他们不修复它,如果其他人没有先解决它,我可以再看看。

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

跳出页面的另一件事是您显然是在动态分配每个节点,一旦您完成它,您的删除函数应该删除内存。

先解决这两个问题,然后再看看你在哪里。

【讨论】:

看了一眼后看到的第三个错误。您有一个没有增量的 while 循环。你有 count++ 我看不到的地方吗? 老实说,对于这个错误,你最好的办法是在 while 循环的开头设置一个断点,并在调试模式下运行你的程序,看看它在哪里做你没有做的事情'没想到。【参考方案2】:

看起来 temp 不能是给出错误的行的空指针,但以前的可能是。

重要提示:注意这一行

else if (count = position + 1)

实际上是一个任务。你可能是说

else if (count == position + 1)

之前的 if 语句也是如此。

干杯!

【讨论】:

以上是关于创建链表时访问冲突错误的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在销毁链表时取消引用 nullptr 时停止接收异常错误?

如何处理访问写入冲突错误? [复制]

链表访问冲突写入位置

Java错误:创建新的链表节点时无法访问语句[关闭]

WindowsError:异常:使用从 C++ 到 Python 的 ctypes 创建 DLL 时出现访问冲突或 Windows 错误 193

访问冲突指针错误