2013-03-24 1 views
-6

목록이 있는데이 목록에서 사람들의 이름을 비교하는 레지스터를 제거하고 싶습니다.strcmp (목록)로 세그먼트가 잘못되었습니다.

void remove(char name[]){ 
    if (pBegin!=NULL){ 
    Nodo *pcopy; 
    if (!strcmp(name,pBegin->person.name)){ 
     pcopy=pBegin; 
     pBegin=pBegin->pNext; 
     printf("REMOVED!\n"); 
     free(pcopy); 
    } 
    else{ 
     Nodo *pCurrent=pBegin; 
     Nodo *pPrevious=NULL; 
     while ((strcmp(name,pCurrent->person.name)) && (pCurrent!=NULL)){ // here is probably the error 
     pPrevious=pCurrent; 
     pCurrent=pCurrent->pNext; 
     } 
     if (pBegin==NULL) 
     printf("The name was not found!\n"); 
     else{ 
     pPrevious->pNext=pCurrent->pNext; 
     printf("REMOVED!\n"); 
     free(pCurrent); 
     } 
    } 
    } 
    else 
    printf("empty list!\n"); 
} 

큰 게시물에 대한 죄송 시각적으로 추한 : 다음은 함수를 제거합니다. 그것은 여기에 내 첫 게시물과 나는 C를 처음이야, 모든 노력했지만이 오류를 해결할 수 없습니다.

+4

우리가 파헤쳐야 할 코드가 너무 많습니다. 프로그램을 디버그하고 문제를 해결할 수없는 경우 짧은 예제 데모와 함께 문제를 게시하십시오. StackOverflow는 디버깅 서비스가 아닙니다! – Johnsyweb

+0

@Johnsyweb [ok] –

답변

1

strcmp에서 사용한 후 pCurrent! = NULL을 테스트하는 것은 너무 늦습니다.

while (pCurrent!=NULL && strcmp(name,pCurrent->person.name)){ // test names are different 
+0

감사합니다. 프로그램이 올바르게 작동하고 있습니다 :-) –

관련 문제