错误:在同一内存位置调用两次delete

时间:2011-06-12 02:42:12

标签: c++ pointers memory delete-operator

我在C ++中编写了这个函数,作为更大程序的一部分:

Object Single_list<Object>::pop_front() {
    //Single_node<Object> *tmp_front;  
    //Object hold;
    if (empty()) {
        throw underflow();
    } 

    Single_node<Object> first_node = front();
    Single_node<Object> *ptr = list_head;                                                            
    list_head = list_head->next();  
    delete ptr;
    return first_node.retrieve();
}

但是,当我尝试使用此功能时,我收到以下消息:

  

警告:在同一内存位置调用delete两次:0x100100160

我真的很困惑,我没有删除指针(假设是导致问题的原因?)两次。

任何建议都将受到赞赏。

根据要求,这里是Single_Node的构造函数和检索函数,虽然我不确定这对有关删除的错误有多大帮助:

template <typename Object>
Single_node<Object>::Single_node( const Object &e, Single_node<Object> *n ):element( e ), next_node( n )
{
    // empty constructor
}

template <typename Object>
Object Single_node<Object>::retrieve() const
{
    return element;
}

template <typename Object>
Single_node<Object> *Single_node<Object>::next() const
{ 
    return next_node;
}

1 个答案:

答案 0 :(得分:0)

在Mankarse的评论的基础上,尝试以下方法:

Object Single_list<Object>::pop_front() {

    if (empty()) {
        throw underflow();
    } 

    Object result = front().retrieve();

    Single_node<Object> *ptr = list_head;
    list_head = list_head->next();  
    delete ptr;
    return result;
}

这会在删除之前从第一个节点获取结果。