提问人:aditpatel 提问时间:11/2/2023 更新时间:11/2/2023 访问量:36
抛出异常:读取访问冲突,插入链表将不起作用 [重复]
Exception thrown: read access violation, Inserting linked list will not work [duplicate]
问:
这个问题在这里已经有答案了:
删除 C++ 中的指针 (6 个答案)
删除指针和对象 (5 个答案)
我应该删除指针吗? (3 个答案)
C++:删除由new创建的指针时出现内存问题 (3个答案)
如何在不删除指针指向的数据的情况下删除指针? (8 个答案)
20天前关闭。
我正在为我的链表类创建一个成员函数,该函数在单链表的第 n 个位置插入一个节点。我正在使用标准节点类。 每当我在 main.cpp 中运行代码时:
library.insert("I, Robot", "Isaac Asimov", 7);
library.insert("Brave New World", "Aldous Huxley", 0);
library.insert("Animal Farm", "George Orwell", 5);
我收到此错误:“抛出异常:读取访问冲突。beforeNode 已0xFFFFFFFFFFFFFFAF。
这是我的函数:
int LinkedList::insert(string title, string author, int position)
{
if (position < 0 || position > size) {
cout << "Not a valid insert -- out of range!\n";
return 1;
}
else if (position == 0) {
Node* newNode = new Node(title, author, head);
head = newNode;
delete newNode;
size++;
}
else if (position == size) {
append(title, author);
}
else {
Node* beforeNode = head;
for (int i = 0; i < position; i++) {
beforeNode = beforeNode->next;
}
Node* newNode = new Node(title, author, beforeNode->next);
beforeNode->next = newNode;
delete newNode;
delete beforeNode;
size++;
}
return 0;
}
我尝试以不同的方式重写它,但它没有改变错误消息。
答: 暂无答案
评论
head = newNode; delete newNode
delete
insert(string title, string author, int position)
nullptr
head = newNode; delete newNode;
这是绝对不正确的。你摧毁了你设定的物体,使它成为一个悬空的指针,指向被释放的记忆。 与 GC 语言有很大不同,GC 语言有一个概念,只要它被引用,就会保留对象。在 c++ 中,没有进行引用计数。你告诉它摆脱头部指向的物体。c++
new