2013-04-04 5 views
0

у меня есть:Ошибка при удалении узла из связанного списка

class Node { 
    int* vec; 
    Node* next; 
}; 

Class LinkedList{ 
    Node* head; 
} 

Я сделал функцию, которая нашла узел, который я хочу, чтобы удалить:

Node* tmp = find("abc"); 

Я заказал указатели и я отлаживайте его, и все в порядке.

теперь я должен удалить tmp, поэтому я попытался:

delete[] tmp->vec; 
delete tmp; // here I get an error window. 

почему?

ЭТО МОЙ РЕАЛ КОД:

class Show_Time 
{ 
    private: 
    string movieCode; 
    string movieName; 
    string time; //the time of screening the movie. 
}; 


class Time_LinkedList 
{ 
private: 
    class Time_Node 
    { 
    public: 
     Show_Time* data; 
     Time_Node* prev; 
     Time_Node* next; 
    public: 
     Time_Node(string movie_code, string movie_name, string time_of_movie); //"Time_Node" constructor 
     ~Time_Node();//"Time_Node" destructor 
    }; 
    Time_Node* head; //pointer to the first node in the linkedlist 
}; 


void Time_LinkedList::delete_TimeNode(string movieCode, string time) 
{ 
    Time_Node* tmp = find_Time_Node(movieCode,time); 

    // the case that there is one element in the list 
    if (tmp->prev == NULL && tmp->next == NULL) 
    { 
     head = NULL; 
    } 

    // the case that it's the first element of the list 
    else if (tmp->prev == NULL) 
    { 
     head = tmp->next; 
     tmp->next->prev = head;   
    } 

    // the case that it's the last element of the list 
    else if (tmp->next == NULL) 
    { 
     tmp->prev->next = NULL; 
    } 

    // there are element in the left and right of the element 
    else 
    { 
     tmp->prev->next = tmp->next; 
     tmp->next->prev = tmp->prev; 
    } 

    // delete the temp and its data 
    delete tmp->data; 
    delete tmp; 
} 
+1

Можете ли вы показать нам код, в котором вы размещаете 'vec' –

+2

Может быть много причин. Вам нужно будет показать нам еще один код! – Nbr44

+0

нормально, я обновляю свою тему для реального кода. Спасибо. –

ответ

1

Так в соответствии с вашим ответом ваш вопрос, что вы делаете double delete, который undefined behavior. Вы должны удалить delete data от Time_LinkedList::delete_TimeNode и позволить деструктору выполнять свою работу.

Смежные вопросы