【发布时间】:2020-05-04 20:30:12
【问题描述】:
我在运行程序时不断收到此错误。
HEAP[PA1.exe]: Invalid address specified to RtlValidateHeap( 00C40000, 00C48880 )
PA1.exe has triggered a breakpoint.
我将它缩小到我的析构函数,但我不确定它为什么会导致它。
List::~List()
{
if (!nullptr) {
Item* toDelete = Head;
while (toDelete != NULL) {
Item* next = toDelete->Next;
delete toDelete;
toDelete = next;
}
}
编辑:我看到我的问题出在我的构造函数中,但是我不确定我需要改变什么。当我开始进行深层复制时,就会发生错误。所以我的猜测是它的复制构造函数。
List::List()
{
Head = 0;
Prev = 0;
Next = 0;
}
List::~List()
{
Item* move = Head;
while (Head)
{
Head = move->Next;
delete move;
move = Head;
}
}
List::List(const List& copy)
{
Head = copy.Head;
Next= copy.Next;
Prev= copy.Prev;
}
List& List::operator=(const List& t)
{
Head = t.Head;
Prev = t.Prev;
Next = t.Next;
return *this;
}
【问题讨论】:
-
当您意识到程序崩溃的位置通常与错误所在的位置无关时,编程会变得更容易理解。缩小坠机地点的范围很重要,但它通常只是谜团的第一条线索。
标签: c++ visual-c++ linked-list destructor doubly-linked-list