2013-10-24 4 views
-2

Я пытаюсь реализовать очереди со связанным списком с узлом заголовка. Программа компилируется, но она дает ошибку времени выполнения. Можете ли вы предложить, что мне следует изменить?Единственный связанный список с заголовком - ОШИБКА

Функция дисплея в порядке.

#include <stdio.h> 
#include <stdlib.h> 
#define MALLOC(p,n,type)  \ 
p=(type*)malloc(n*sizeof(type)); \ 

struct node 
{ 
    int info; 
    struct node *link; 
}; 
typedef struct node *NODE; 

NODE insert_rear(int item,NODE head) 
{ 

NODE temp; 
MALLOC(temp,1,struct node); 
temp->info=item; 
temp->link=NULL; 
if(head==NULL) 
{ 
    head->link=temp; 
    return head; 

} 
NODE cur; 

while(cur->link!=NULL) 
{ 
    cur=cur->link; 
} 
cur->link=temp; 

return head; 
} 

NODE delete_front(NODE head) 
{ 
    if(head==NULL) 
    { 
     printf("Empty"); 
     return head; 

    } 
    NODE temp,first; 
    first=head->link; 
    head->link=first->link; 
    printf("Item deleted is %d",first->info); 
    free(first); 


    return head; 
} 
+2

Какие ошибки времени? Ошибки бывают разных типов. – abelenky

+0

У вас нет программы здесь, которую мы можем запустить, особенно потому, что ей не хватает функции 'main'. Я не могу скомпилировать и запустить этот код, поэтому я не могу воспроизвести вашу проблему, поэтому я не могу вам помочь. – abelenky

+1

Удалить точку с запятой в конце строки '# define'. И удалите хотя бы вторую обратную косую черту; весь макрос поместился бы на одну линию удобно, поэтому я потерял бы и то, и другое. –

ответ

1

Эта линия имеет для вас какой-то смысл?

if(head==NULL) 
{ 
    head->link=temp; 

перефразировать, если head является NULL, идти вперед и разыменовывать известного неверного указателя.
Конечно, вы получите ошибку seg!


PS
Я нашел это, написав main функцию, а самое главное, отслеживание кода в отладчике.
Вы должны отслеживать свой код в отладчике.

main я использовал:

int main() 
{ 
    NODE head = NULL; 
    head = insert_rear(3, head); // <= Breakpoint here. Step Into 

    getchar(); 
    return 0; 
} 
Смежные вопросы