Почему этот код вызывает ошибку сегментации? Он вызывает разлом seg в деструкторе. Но когда я называю свободную функцию без деструктора, все в порядке. Некоторые ответы не понимают проблемы. Проблема в том, что если я использую свободную функцию в main() s.free(); Это прекрасно работает .. Но я делаю деструктор делать бесплатную() работу, это не нормально.ошибка сегментации деструктора класса
#include<iostream>
using namespace std;
class Stack
{
public:
int pop() {
data = next->data;
auto tmp = next;
next = next->next;
delete tmp;
return data;
}
void push(int n) {
Stack* p = new Stack();
p->data = n;
p->next = next;
next = p;
size++;
}
virtual ~Stack() {
free();
}
void free() {
while(next) pop();
}
Stack* next = nullptr;
protected:
int data;
int size = 0;
};
int main()
{
Stack s;
for(int i=0; i<30; i++) s.push(i);
}
Я предлагаю научиться использовать отладчик. – juanchopanza
У вас есть несколько освобождений ... Когда вы создали множество 'Stack', когда вы нажимаете элементы, когда исходный стек уничтожается, вы удаляете другие, но цепочка остается ... –
, но проблема в том, что если я использую свободную функцию в main() s.free(); Он отлично работает. Но я делаю деструктор делать бесплатную() работу, это не нормально. – Parker