Ich habe eine Stapelklasse mit List-Node gemacht. Aber einer funktioniert gut, der andere stürzt immer ab. Was ist der Unterschied zwischen zwei Programmen? I thimk destructorUnterschied zwischen zwei Programmen?
#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;
}
virtual ~Stack() {
free();
}
void free() {
while(next) pop();
}
protected:
int data;
Stack* next = nullptr;
};
int main()
{
Stack s;
s.push(1);
s.push(2);
//s.free();
}
oben Programm zerstört immer abstürzt ..
#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;
}
virtual ~Stack() {
// free();
}
void free() {
while(next) pop();
}
protected:
int data;
Stack* next = nullptr;
};
int main()
{
Stack s;
s.push(1);
s.push(2);
s.free();
}
dieses Programm funktioniert gut.
Was ist der Unterschied zwischen den beiden?
Der Unterschied ist, dass eine Zeile im oberen Code auskommentiert ist. Es ist sehr wahrscheinlich, dass das 'free()' im obigen Code zu einem "double free or corruption" -Fehler führt. Problemumgehung: Verwenden Sie einen Smart-Zeiger (- Sie haben C++ 11 getaggt). – davidhigh
lesen Sie den Code, bevor Sie kommentieren. – Parker