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

이 줄이 당신에게 의미가 있습니까? head가 NULL 인 경우

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

고쳐은, 앞서 가서 알려진 잘못된 포인터 역 참조.
물론 seg-fault가 발생합니다!


PS 나는 디버거의 코드를 추적, 가장 중요한 것은 main 함수를 작성하여이를 발견합니다.
디버거에서 코드를 추적해야합니다.

내가 사용하는 main :

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

    getchar(); 
    return 0; 
}