时间:2010-01-30 02:31:14

标签: c++ memory linked-list allocation

我正在尝试使用基础链表结构制作堆栈。

也许我错了,但我在使用remove()函数时遇到了麻烦。

int Stack::remove(){  
  node* victim = new node;  
  int popped;  
  popped = top->element;  
  victim = top;
  top = victim->next;  
  delete victim;  
  return popped;  
}

我正在接受glibc检测

  

双重免费或腐败(外出);

由于我要为受害者分配新内存,我不是要删除受害者,还是我不必担心的事情?

3 个答案:

答案 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覆盖该指针,从而失去对刚刚分配的内存的跟踪。