有谁知道这有什么问题吗?尝试在非空堆栈上使用析构函数时,它一直给我“断言失败” _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/