我正在尝试使用基础链表结构制作堆栈。
也许我错了,但我在使用remove()函数时遇到了麻烦。
int Stack::remove(){
node* victim = new node;
int popped;
popped = top->element;
victim = top;
top = victim->next;
delete victim;
return popped;
}
我正在接受glibc检测
双重免费或腐败(外出);
由于我要为受害者分配新内存,我不是要删除受害者,还是我不必担心的事情?
答案 0 :(得分:2)
答案 1 :(得分:1)
没有理由像remove()
那样在victim
方法中分配堆内存。你想要的是:
int Stack::remove(){
node* new_top = top->next;
int popped = top->element;
delete top;
top = new_top;
return popped;
}
答案 2 :(得分:1)
您无需为victim
分配节点。只需将堆栈顶部分配给它,如果不是null
,则将top
设置为其next
指针,从victim
检索值,然后取消分配{ {1}}。
实际上并不是腐败,而是内存泄漏 - 您正在分配一个节点,然后用victim
覆盖该指针,从而失去对刚刚分配的内存的跟踪。