有谁知道这有什么问题吗?尝试在非空堆栈上使用析构函数时,它一直给我“断言失败” _BLOCK_TYPE_IS_VAILD(pHead-> nBlockUse)
编辑:更多代码:

class stack
{
private:
   struct StackNode
   {
      int x;
      int y;
      StackNode *next;
   };

   StackNode *top;

public:

   stack()
      {  top = NULL; }

   ~stack();

 stack::~stack()
    {
        StackNode *nodePtr,*nextNode;
            nodePtr=top;
            while (nodePtr!=NULL)
            {
                nextNode=nodePtr->next;
                delete nodePtr;
                nodePtr=nextNode;
            }
    }

main.cpp
mouse_position.push(mouse_x,mouse_y);
print_stack(mouse_position);

void print_stack(stack m)
{
    int tempx=0;
    int tempy=0;
//  while(!m.isEmpty()){
//      m.pop(tempx,tempy);
    cout<<tempx<<tempy<<endl;
//  }

}

最佳答案

当您将堆栈传递到print_stack中时,您将其复制,但未遵循三个What is The Rule of Three?的规则,这会导致双重删除和您的问题。

除非您是作为练习来做,否则请改用std::stack-经过多年的测试和调试。

关于c++ - 析构函数上的“Assertion Failed”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5317488/

10-11 22:25