创建链表时访问冲突错误
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 时停止接收异常错误?
WindowsError:异常:使用从 C++ 到 Python 的 ctypes 创建 DLL 时出现访问冲突或 Windows 错误 193