gpt4 book ai didi

C++ LinkedList 读访问冲突错误

转载 作者:行者123 更新时间:2023-12-01 19:22:30 26 4
gpt4 key购买 nike

我正在尝试用 C++ 编写自己的 LinkedList 应用程序。现在我陷入了需要帮助的境地。我的应用程序触发访问冲突错误,我不知道为什么。我很感激任何形式的帮助。当我在 liste -> remove(0) 之后删除方法“printList()”时(现在此方法仅适用于列表中的 1 个节点),它正在工作,但我想查看输出。如果我再次插入方法 printList(),它会再次崩溃。

这是我的代码:

LinkedList.cpp

#include "LinkedList.h"
#include <iostream>

LinkedList::LinkedList() {
head = NULL;
tail = NULL;
}

LinkedList::~LinkedList() {
std::cout << "Die Liste wurde aus dem Speicher gelöscht.";
}

int LinkedList::append(const char* text) {
//new Node
Node* node = new Node();
node->setData(text);
node->setNext(NULL);

//temp pointer
Node* tmp = head;
if (tmp == NULL) {
//List empty && set first node to head
head = node;
} else {
//list not empty, find the end of the list
while (tmp->getNext() != NULL) {
tmp = tmp->getNext();
}
tmp->setNext(node);
}
return 0;
}

int LinkedList::remove(int p) {
int counter = 0;
//temp pointer
Node* node = head;
delete node;
return 0;
}

void LinkedList::printList() {
Node* node = head;
if (node == NULL) {
std::cout << "Empty";
} else if (node->getNext() == NULL) {
//only one node in the list
std::cout << node->getData() << " --> NULL" << std::endl;
} else {
do {
std::cout << node->getData() << " --> ";
node = node->getNext();
} while (node != NULL);
std::cout << "NULL" << std::endl;
}
}

节点.cpp

#include "node.h"
#include <iostream>

Node::Node() {
//NOTHING
}

Node::~Node() {
std::cout << "Node aus Speicher gelöscht.";
}

void Node::setData(const char* d) {
data = d;
}

void Node::setNext(Node* n) {
next = n;
}

const char* Node::getData() {
return data;
}

Node* Node::getNext() {
return next;
}

main.cpp

#include "LinkedList.h"

int main() {
LinkedList* liste = new LinkedList();
liste->printList();
liste->append("10");
liste->printList();
liste->remove(0);
liste->printList();
return 0;
}

最佳答案

在“有限范围”remove 函数中,您删除头节点(通过 node 变量)。这意味着下次您尝试打印列表时,您将尝试使用已删除的值,因此会调用未定义的行为。

在一般情况下实现 remove 函数之前,您应该将头指针设置为 null。

int LinkedList::remove(int p) {

if(head){
delete head;
head = nullptr;
}

return 0;
}

关于C++ LinkedList 读访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40456686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com