类析构函数分段错误

时间:2016-10-19 07:30:34

标签: c++ destructor

为什么这段代码导致分段错误? 它导致析构函数中的seg错误。 但是当我在没有析构函数的情况下调用自由函数时,它没问题。 有些答案不明白这个问题。 问题是,如果我在main()中使用自由函数 s.free(); 它工作正常.. 但我让析构函数执行free()工作,这不行。

objBinReader.PeekChar().ToString()

2 个答案:

答案 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;
}

`