2015-09-29 2 views
0
struct Node* Dequeue(struct Queue *queue) 
{ 
struct Node *temp = queue->front; 
if (temp == NULL) 
{ 
    printf("Nothing to delete"); 
    return temp; 
} 
else if (temp->next == NULL) 
{ 
    free(temp); 
    queue->front = NULL; 
    queue->rear = NULL; 
    printf("Successfully delete."); 
    return temp; 
} 
else 
{ 
    queue->rear = queue->rear->next; 
    free(temp); 
    printf("Successfully delete."); 
    return temp; 
} 
} 

Как я напечатал в функции main() данные удаленного узла, он выводит случайное число, в чем моя ошибка? Кто-нибудь, пожалуйста, помогите.Функция dequeue не работает должным образом, какова моя ошибка?

+0

Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, ** конкретную ** проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без ** ясной постановки проблемы ** не полезны другим читателям. См.: Как создать [mcve]. – Olaf

ответ

2

Вы оба free и return узел. Если вы хотите освободить узел, не возвращайте его. Если вы хотите вернуть узел, не освобождайте его. Как и сейчас, вы возвращаете указатель на то, где узел был до того, как вы его освободили. Какая польза?

+0

Чтобы я мог напечатать в основной функции данные, которые я удалил. – ILoveYouVirus

+0

@ILoveYouVirus Кроме того, вы уже удалили его. Так что его больше нет. –

+0

После того, как вы освободите его, он больше не существует ... (может быть, но нет гарантии), как правило, адресное пространство функции стирается после возврата. –

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