2017-12-20 3 views
-1

C에서 연결된 목록에서 노드를 삭제하는 동안 한 가지 문제가 있습니다. 어디에서 내가 누락되었지만 어떻게 든 잘못된 노드가 삭제됩니다. 예상 된 것, 또한 마지막 하나는 사라졌고 내가 free() 할 때 실제로 작동하지 않는다. 여전히 데이터를 유지하고 인쇄한다. 아무도 도와 줄 수 있습니까?연결된 목록에서 노드를 삭제하는 중 제대로 작동하지 않습니다.

node=head; 
temp=node->next; 

if(record == 1){ 
    head=head->next; 
    printf("\nInside if count %d node %s head %s",count, node->name, head->name); 
    free(node); 
} 
else if (record > 1){ 
    while(count < record-1 && count < list_size){ 
     printf("\nInside while count %d node %s head %s",count, node->name, head->name); 
     node = temp; 
     temp = temp->next; 
     node->next = temp->next; 
     count++; 
    } 
    printf("\nOutside while temp %s node %s head %s",temp->name,node->name,head->name); 
    free(temp); 
} 
+0

같은 적어도이 문장 온도 = 노드 -> 다음; 의미가 없으며 정의되지 않은 동작이 발생할 수 있습니다. –

+0

함수에서 코드 스 니펫 일 경우 전체 함수를 표시하십시오. –

+0

다음 명령문 node-> next = temp-> next; while 루프에서도 의미가 없습니다. –

답변

0

이 잘 정의되지 않은 동작을 호출에 최고의 NULL 값에 접근 될 수 있습니다 코드의 장소가있다 : 다음은 내 코드입니다.

node = head; 
temp = head; 
if(head == NULL){ 
    fprintf(stderr,"List is empty"); 
    exit(1); 
} 
if(record == 1){ 

    head=head->next; 
    printf("\nInside if count %d node %s head %s",count, node->name, head->name); 
    free(node); 
} 
else if (record > 1){ 
    for(size_t i = 1; i < record && temp != NULL; i++){ 
     node = temp; 
     temp = temp -> next; 
    } 
    if(temp) 
     node->next = temp->next; 
    free(temp); 
} 

이와 같은 쓰기 방법의 경우 포인터를 사용해보십시오. 여기서 전역 변수는 필요하지 않습니다. 이전에는 코드에 의미가없는 일부 중복 지정 문이있었습니다.

전체 예제는 것

struct Node* deleteNth (struct Node *head, int N){ 
    struct Node *t ; 
    if(head == NULL){ 
     fprintf(stderr, "%s\n", "List is empty"); 
     exit(1); 
    } 
    if(N <= 0){ 
     fprintf(stderr, "%s\n", "Position given wrong"); 
     exit(1); 
    } 
    if(N == 1){ 
     t = head; 
     head = head->next; 
     free(t); 
     return head; 
    } 

    struct Node *p = t; 
    int i; 

    for(i = 1; i < N && t!=NULL; i++){ 
     p = t; 
     t = t->next; 
    } 
    if(t == NULL){ 
     fprintf(stderr,"%s\n","Insuffiecient Number of elements"); 
     exit(1); 
    } 
    if(t!= NULL){ 
     p->next = t->next; 
    } 
    free(t); 
    return head; 
} 
관련 문제