我想实现一个堆栈但是当我执行pop()函数时,我不能从我创建的链表中删除一个成员。
如果我不使用删除,则不会出现任何问题,但我不确定是否仍有内存泄漏
Debug Assertion Failed:_CrtIsValidHeapPointer(block)
class node {
public:
int data;
node *next;
node *prev;
node() {
prev = NULL;
next = NULL;
}
node(int val) {
data = val;
prev = NULL;
next = NULL;
}
void show() {
cout << data << endl;
}
};
class stack {
node *end;
int size;
public:
stack() {
end = NULL;
size = 0;
}
void push(node * p) {
if (size == 0) { end = p; }
else {
end->next = p;
p->prev = end;
end = p;
}
p->show();
size++;
}
void pop(){
if (size == 1) { end = NULL; }
else {
node *temp = new node;
temp = end->prev;
temp->next = NULL;
delete end;// Debug Assertion Failed:_CrtIsValidHeapPointer(block)
end = temp;
}
size--;
end->show();
}
};
我知道它与释放内存有关,但我似乎无法弄清楚问题究竟是什么。
答案 0 :(得分:0)
在我看到明显错误的事情是行
delete [] end;
您应该将其更改为
delete end;
您应该只使用delete []
删除对象数组(已使用new []分配)。