为什么这段代码导致分段错误? 它导致析构函数中的seg错误。 但是当我在没有析构函数的情况下调用自由函数时,它没问题。 有些答案不明白这个问题。 问题是,如果我在main()中使用自由函数 s.free(); 它工作正常.. 但我让析构函数执行free()工作,这不行。
objBinReader.PeekChar().ToString()
答案 0 :(得分:3)
您的pop
函数会破坏整个堆栈。它是deletes
tmp
节点(通过调用Stack
析构函数),它仍然指向新的next
。
由于Stack
析构函数在next
上调用delete,因此在同一对象上会出现多个析构函数调用。
JMA 几秒钟就把它打败了,所以请参考他们的代码修补程序以获得快速解决方案。
但是,我建议您添加专用的Node
结构而不是撰写Stacks
,这实际上会提高代码的清晰度。
答案 1 :(得分:-1)
在类的构造函数中,您必须设置next = nullptr
,否则free()
函数中的循环将不会停止。
编辑:
我认为问题是因为你删除了pop,并再次调用析构函数。
试试这个:
`
int pop() {
data = next->data;
auto tmp = next;
next = next->next;
tmp->next = nullptr;
delete tmp;
return data;
}
`