2016-09-15 4 views
0

데이터 구조를 처음 사용하고 연결된 목록의 끝에서 요소를 추가하려고했지만 오류 세그먼테이션 오류가 발생하는 링크 된 목록으로 시작되었습니다. C 언어로 구현하고 있습니다.오류 : 세그먼트 오류 (코드 덤프)

이 오류가

코드를 무엇을 의미하는지 이해가 안 :

struct node 
{ 
int data; 
struct node *next; 
}; 
struct node *head; 
void fnInsert(int x){ 
    if(head==NULL){ 
    printf("head is null"); 
    node* temp=(node*)malloc(sizeof(struct node)); 
    temp->data=x; 
    temp->next=head; 
    head=temp; 
    } 
    else{ 
     node* temp=head; 
     struct node* previousNode; 
     do{ 
      temp=temp->next; 
      previousNode=temp; 
     }while(temp!=NULL); 
     node* temp1=(node*)malloc(sizeof(struct node)); 
      temp1->data=x; 
      previousNode->next=temp1; 
      temp1->next=NULL; 
    } 
}; 
void fnPrint(){ 
    struct node* temp=head; 
    printf("list is:\n"); 
    while(temp!=NULL){ 
     printf("%d",temp->data); 
     temp=temp->next; 
     printf("\n"); 
    } 
} 
int main(){ 
    head=NULL; 
    printf("how many numbers\n"); 
    int n,i,x; 
    scanf("%d",&n); 
    for(i=0;i<n;i++){ 
     printf("Enter the number\n"); 
     scanf("%d",&x); 
     fnInsert(x); 
     fnPrint(); 
    } 
} 

어떤 도움을 주시면 감사하겠습니다.

+0

을 의미해야합니다. 세그먼트 오류는 잘못된 메모리에 액세스 한 코드를 의미합니다. 디버거를 사용하여 문제를 찾을 수 있습니다. – kaylum

+0

@kaylum 온라인으로 디버깅 할 옵션이 없습니다. ( –

+0

집에 PC가 있습니까? 많은 디버거를 무료로 다운로드 할 수 있습니다. – kaylum

답변

5

오류는 다음 줄에 있습니다

temp=temp->next; 
previousNode=temp; 

그것은 귀하의 경우에는 반대 즉

previousNode=temp; 
temp=temp->next; 

해야 previousNode 결국 NULL되고있다 그리고 당신은 NULL 포인터 역 참조 previousNode->next 즉 액세스하려고 . 세그먼트 화 오류입니다.

또한 여러 곳에서 node*을 사용했습니다. 모두를 struct node*으로 바꿔야하거나 typedef

관련 문제