我在运行时不断获得_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,直到堆栈不为空。

10-04 15:10