我正在编写优先级队列,但出现错误:
free():在 tcache 2 中检测到双重空闲
我知道问题出在PriorityQueue::Remove(int value)
方法上。该方法尝试按值删除元素。此方法在元素已被删除时返回 TRUE,否则返回 FALSE。
这是代码:
bool PriorityQueue::Remove(int value)
{
Element_t *actualItem = this->GetHead();
Element_t *temporary = nullptr;
if (actualItem == nullptr) {
return false;
}
while (actualItem != nullptr) {
if (actualItem->value == value) {
if (actualItem == this->GetHead()) {
if (actualItem->pNext == nullptr) {
delete actualItem;
m_pHead = nullptr;
return true;
}
m_pHead = actualItem->pNext;
delete actualItem;
return true;
}
if (actualItem->pNext == nullptr) {
delete actualItem;
temporary->pNext = nullptr;
return true;
}
temporary->pNext = actualItem->pNext;
delete actualItem;
return true;
}
temporary = actualItem;
actualItem = actualItem->pNext;
}
return false;
}
规格:
优先级队列从优先级最高的项目到优先级最低的项目排序。方法GetHead()
返回队列中具有最高优先级的第一项。队列元素的结构只有值和指向队列中下一个元素的指针。
请问,有没有人看到错误使用的错误delete
?
编辑:没有双重免费。代码运行良好。问题只出在我的电脑上——可能是架构损坏(不知道)。当我尝试在另一台 PC 上编译代码时,一切正常。