2013-08-25 2 views
0

다음 코드의 인쇄 목록 기능이 작동하지 않습니다. 주 함수에서 노드 포인터를 전달하면 값이 전달되지 않습니다.포인터가 전달되지 않고 인쇄 목록이 작동하지 않습니다.

void printlist(node *head) 
{ 

    node *current=head; 

    while(current!=NULL) 
    { 
     printf("\n %d",current->data); 
     current=current->next; 
    } 
} 


int main(void) 
{ 
    int ch=1; 
    int choice=1; 
    while(ch=1) 
    { 
     node *head; 
     head=(node*)malloc(sizeof(node)); 
     printf("Press 1 for create list \n2 for display \n3 for add at end of list \n"); 
     scanf("%d",&choice);` 


     switch(choice) { 
     case 1: 
      head=createlist(); 
      node *current=head; 
      break; 

     case 2: 
      printf("Welcome to list printer"); 
      printlist(head); 
      break; 
     } 
    } 
} 

** 참고 : -create 목록 내가 질문 크기를 줄이기 위해 여기에 넣어되지 않은 잘 작동, 내가 메인 함수 내에서 같은 인쇄 기술을 사용하여 시도하고 그것은 charm.Its처럼 일에만 내가 오류를 시작한 함수로 구현하려고했을 때.

+0

디버거에서 코드를 단계별로 또는 값을 검사하는 코드에서 일부의 printf 문에 넣어나요 malloc()의 반환을 캐스팅하지 않습니다

  • 를 사용하지 않습니다? 그것은 시도하는 첫번째 일이 될 것입니다. 모든 코드를 표시하십시오. – OldProgrammer

  • +0

    'createlist()'함수가 잘 동작합니까? – Qiu

    +0

    while 루프가 깨 졌으므로 아마도 == – Fred

    답변

    3

    기본 문제는 여기에 있습니다 :

    while(ch=1) 
        { 
         node *head; 
    

    headwhile 블록에 지역이다. case 1에 새 목록을 만든 후에는 해당 변수가 범위를 벗어나 루프가 돌아 오기 전에 사라져서 인쇄 할 수있는 기회가 주어집니다. 따라서 초기화되지 않은 메모리를 printlist()에 전달하는 것입니다. 당신이 필요합니다 : 당신이 이제까지 어쨌든 ch을 변경하지 않는 것,

    • ch=1는 while 루프가 끝이 없을 것입니다 의미

      node * head; 
      while (ch=1) { 
      

      코드와 많은 다른 문제가 있습니다.

    • 의 메모리가 head인데 createlist()을 호출하면 head의 값을 덮어 쓰고 메모리를 사용하지 않고 잃어 버릴 수 있습니다.
    • node * current
    +0

    Paul, 대답 해 주셔서 감사합니다.이 코드는 코드의 일부분이며, 그 다음에 오는 경우 중 하나에서 ch 값이 변경됩니다. 인쇄가 주 기능 내에서 완료되면 코드는 printlist 기능없이 작동합니다. – Nahcraved

    +0

    @Nahcraved :'ch' 문제는 문제가 가장 적습니다. 내가 말했듯이, 주된 문제는 '머리'의 범위입니다. 앞으로는 답변을 원하는 실제 코드를 게시하십시오. 당신이 빠뜨린 다른 코드를 언급하는 것을 발견하면, 당신을 도우려는 사람의 시간을 완전히 낭비 할 심각한 위험을 감수해야합니다. 코드 조각을 제출하는 경우 코드 조각이 컴파일되어 있는지 확인하고 자체적으로 문제를 표시하십시오. 아무도 볼 수없는 임의의 코드로 도울 수 없습니다. –

    +0

    미안, 폴. 여기 새로 왔어. 다시는 이런 일 없을 거라 약속 했어. 나는 그 범위를 고치고 다시 돌아올거야, 많은 고마워. – Nahcraved

    관련 문제