堆栈实现调试断言失败:_CrtIsValidHeapPointer(block)
问题描述:
我想实现一个堆栈,但是当我做pop()函数时,我不能从我创建的链表中删除一个成员。堆栈实现调试断言失败:_CrtIsValidHeapPointer(block)
,如果我不`吨使用删除,也不会出现任何问题,但如果依然内存泄露
我不知道调试断言失败:_CrtIsValidHeapPointer(块)
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();
}
};
我知道它有与释放记忆有关,但我似乎无法弄清楚问题究竟在哪里。
答
在我看到的,这显然是错误的事情是行
delete [] end;
您应将其更改为
delete end;
,才应使用delete []
删除对象的数组(已分配使用新的[])。
您是否尝试用调试器单步执行代码(或通过单击_retry_断言断点),以调查断言时变量的值是什么? –
在应该删除某些东西的函数中看到'new'是非常令人惊讶的。 (这是内存泄漏。) – molbdnilo