Ошибка: вызов delete дважды в одной и той же ячейке памяти - PullRequest
0 голосов
/ 12 июня 2011

Я написал эту функцию на 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 голосов
/ 12 июня 2011

Опираясь на комментарий Манкарсе, попробуйте следующее:

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;
}

Получает результат с первого узла перед его удалением.

...