- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在创建一个双向链表类并使用一个临时节点来插入新值等等。所以我有一个节点结构:
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/
案例研究如下, Tasks Table has an Order ID. 1 Task is belonged to an Order Table. An Order can have many ta
我有一个 fiddle ,如下所示,在位置 4(图片 4、图片 5、图片 6),我想要交叉淡入淡出(淡入/淡出) 要发生的图片库。目前该位置只显示图6。 https://jsfiddle.net/k0
我是一名优秀的程序员,十分优秀!