2013-03-24 32 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 2013-03-24 22:47:05

+0

@Johnsyweb [ok] – 2013-03-24 22:50:08

回答

1

在strcmp中使用它之後,已經太遲了測試pCurrent!= NULL。

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

謝謝,程序現在工作正常:-) – 2013-03-25 00:53:44