我在运行时不断获得_BLOCK_TYPE_IS_VALID(phead-> nBlockUse)。我花了3个小时弄弄它,发现它是由析构函数造成的?我发现的是,当我的堆栈为空时,就没有问题了。但是当有事情发生时,它给了我这个错误。我在线检查了我的析构函数,但我不知道发生了什么。这是我所有的代码。
编辑:我修复了错误,但现在有运行时错误...?
.cpp
我试过了
stack::~stack() ////PROBLEM STILL HERE??
{
while (this)
{
top=top->next;
int x,y;
pop(x,y);
}
}
stack::~stack()
{
StackNode *nodePtr, *nextNode;
nodePtr = top;
while (nodePtr)
{
nextNode = nodePtr->next;
delete nodePtr;
nodePtr = nextNode;
}
}
堆栈::〜stack()
{
while (!isEmpty())
{ int x,y; pop(x,y); }
}
最佳答案
是。问题出在析构函数中。您要删除那里的节点,但不更新top
指针。结果,您的isEmpty()
在检查top
的值时将发生故障。
怎么修?
您已经照顾了删除pop
函数中的节点的原因,为什么要复制析构函数中的逻辑?继续从析构函数调用pop
,直到堆栈不为空。