gpt4 book ai didi

c++ - 在临时指针上使用 "delete"后程序崩溃,即使只剩下新行和删除行?

转载 作者:行者123 更新时间:2023-11-30 03:46:55 24 4
gpt4 key购买 nike

所以我正在创建一个双向链表类并使用一个临时节点来插入新值等等。所以我有一个节点结构:

template <typename T>
struct Node
{
// Data in this node
T mData;
// Link to previous node
Node* mPrev;
// Link to next node
Node* mNext;
};

我在实际的 List 类中有以下成员变量:

// Pointer to the head node
Node<T>* mHead;
// Pointer to the tail node
Node<T>* mTail;
// Pointer to current node
Node<T>* mCurr;
// Number of nodes currently in the list
unsigned mSize;

所有这些都是犹太洁食,是我的教授给我的。

但是,每当我创建一个临时指针来插入一个新值时,使用 delete 关键字会使程序崩溃并出现错误“First-chance exception at ... Access Violation reading location...”。这是我正在编写的函数的示例:

void insert_front(const T& value)
{
Node<T>* temp = new Node<T>;

temp->mData = value;
temp->mPrev = nullptr;
temp->mNext = mHead;

if (mSize == 0)
{
mTail = temp;
mHead = temp;
}
else
{
mHead->mPrev = temp;
mHead = temp;
}
mSize++;
//delete temp;
}

现在除了明显的内存泄漏外,这个函数可以正常工作了。但是当我在任何地方添加删除时,整个事情都会崩溃。即使我删除了除新行和删除行之外的所有内容,所有内容都会崩溃。程序中唯一的其他文件是由我的教授创建的,没有错误。我做错了什么?

最佳答案

如果我敢打赌,我敢打赌临时指针现在是您列表中不可或缺的一部分,而不是一个简单的占位符。

if (mSize == 0)
{
mTail = temp;
mHead = temp;
}
else
{
mHead->mPrev = temp;
mHead = temp;
}

当您删除 temp 时,您将删除 mTail 和 mHead 或 mHead->mPrev 和 mHead 指向的任何内容。当您尝试访问这些已删除的数据时,您会遇到未定义的行为,这通常是崩溃。

关于c++ - 在临时指针上使用 "delete"后程序崩溃,即使只剩下新行和删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907865/

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