2012-10-17 1 views
0

샘플리스트 imlpementation을 확인하기 위해 다음 코드를 시도했습니다. 그러나 언제든지 결과를 표시하려고 할 때 루프 내부에 들어갑니다. 나는 그것이 어디서 잘못되고 있는지를 알 수 없다.올바른 목록 값을 표시 할 수없는 이유는 무엇입니까?

#include<stdio.h> 
#include<stdlib.h> 

typedef struct linkedlist 
{ 
    int data; 
    struct linkedlist *next; 
}node; 

int main() 
{ 
    int ch,num; 

    node *head=NULL; 
    head=(node *)malloc(sizeof(node)); 
    node *new=NULL; 
    new=(node *)malloc(sizeof(node)); 
    node *temp=NULL; 
    temp=(node *)malloc(sizeof(node)); 
    printf("\n1.Insert to list"); 
    printf("\n3.Display the list"); 
    printf("\n Enter Choice->"); 
    scanf("%d",&ch); 
    switch(ch) 
    { 
    case 1:printf("\n Enter data->"); 
      scanf("%d",&num); 
      new->data=num; 
      new->next=NULL; 
      head->next=new; 
      break; 

    case 3: temp=head; 
      while(temp!=NULL) 
      { 
       printf("\n %d",temp->data); 
       temp=temp->next; 
      } 


       break; 
    default:printf("Wrong Choice"); 
       break; 

    } 
    return 0; 
} 

답변

1

여기에는 두 가지 실수가 있습니다.

  1. "새"를 한 번만 할당합니다. 즉, 사용자가 "1"을 입력하고 실제로 노드에 연결할 때마다 동일한 노드를 재사용한다는 의미입니다.
  2. "temp"노드를 사용하지 않으므로 노드를 할당하면 안됩니다. 실제로이 줄이 할당 된 노드에 포인터를 잃고 : case 3: temp=head;이 "메모리 누수가."라고합니다.

포인터를 조금 더 공부하는 것이 좋습니다. 그들은 당신을 혼란스럽게하는 것 같습니다. 그 결과 사용자가 한 일을 할 수

1) 당신은 옵션을 반복하지 않는 (중 프로그램의 각 실행에) 삽입하거나 표시 :

+0

하지만 사용자가 1을 누를 때마다 새로운 "새로운"노드가 만들어지고 연결되어있는 것 같습니다. 내가 생각할 때 일어나지 않는다면 사용자가 1을 누를 때마다 새 노드를 어떻게 만들 수 있습니까? – Mistu4u

+0

실제로 새로운 노드를 생성하는 코드는'malloc (sizeof (node))'호출입니다. –

0

나는 다음과 같은 문제를 볼 수 있습니다. 그가 삽입을 선택하면 그는 표시 할 수 없으며 표시하도록 선택하면 표시 할 목록이 없습니다.

2) 목록에 새 노드를 삽입 할 때마다 새 노드를 만들어야합니다. 현재 동일한 노드의 데이터를 변경하고 있습니다 (새 노드가 가리키고 있음).

1

왜 숙제 문제라고 생각합니까?

여기에 몇 가지 힌트입니다

  1. head 할당하지만 초기화되지 않습니다 당신이에서 인쇄를 시작 곳이다. 솔직히, 나는 그것이 충돌하지 않는 것에 놀란다.

  2. 메뉴를 사용하면 목록을 인쇄하거나 숫자를 입력 한 다음 프로그램이 끝납니다. 나는 당신이 숫자를 입력하고, 프로그램을 다시 실행하여 목록을 인쇄하고 있다고 생각합니다. 프로그램 상태는 실행 사이에 보존되지 않습니다.

+0

왜이 답변에 대한 downvote? – ouah

+0

다시 투표 할 수 있습니다. ;-) 나는 아마 무례한 일 이었기 때문에 나는 사과했다. 그러나 그가 스스로 알아 내려고하지 않고이 질문을 한 것 같으며 코드는 초보자가 이해하지 못함을 보여줍니다. 그의 다른 질문 중 일부는 표준 참조를 참조하여 쉽게 답할 수 있으므로 stackoverflow가 나를 필요로하기보다는 첫 번째 수단 인 것처럼 보입니다. –

+0

* 다시 투표 할 수 있습니다 * 나는 upvote를 한 사람입니다;) – ouah

관련 문제