2013-06-19 80 views
0

調用函數getLength時出現分段錯誤。我編輯的代碼,現在 我得到長度0代替5.獲取鏈接列表大小時出現分段錯誤

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

    node *headptr; 
    node *topptr; 

typedef struct node 
{ 
    int value; 
    struct node *nextPtr; 

}node; 

void initializeLinkedList(node *headptr, node *topptr) 
{ 
    int i=0; 
    headptr = (node*)malloc(sizeof(node)); 
    topptr = (node*)malloc(sizeof(node)); 
    topptr = headptr; 


    headptr->value=i; 
    headptr->nextPtr = (node*)malloc(sizeof(node)); 
    for(i=1;i<5;i++) 
    { 

     headptr = headptr->nextPtr ; 
     headptr->value=i; 
     headptr->nextPtr=(node*)malloc(sizeof(node)); 
     printf("val is %p \n ", *headptr); 
    } 

headptr->nextPtr = NULL; 


} 

int getLength(node *topptr) 
{ 
    int i=0; 
    node* local; 
    local = topptr; 
    while(local!=NULL) 
    { 

    local=local->nextPtr; 
    i++; 
    } 
    return i; 

} 


int main() 
{ 

initializeLinkedList(headptr,topptr); 
printf("val is %d \n", getLength(topptr)); 
return 0; 

}

+2

計數在列表中的元素時,你爲什麼要分配的東西?你只需要迭代列表並增加一個計數器。 – Max

+2

我其實並沒有看到上面提到的問題,只是一個聲明和一些代碼。 –

+0

我同意Max,我編輯了代碼,仍然沒有得到正確的結果。 – user968000

回答

1
void initializeLinkedList(node *headptr, node *topptr) 

將其更改爲

void initializeLinkedList(node *headptr, node** topptr) 

,並相應地改變你的代碼...

有很多太等問題...

當你需要一個指針只是定義指針不分配內存並覆蓋主角。

如果我必須對它進行編碼

void initializeLinkedList(node **topptr) 
    { 
     int i=0; 
     node* headptr = (node*)malloc(sizeof(node)); 
     headptr->value=i; 

     *topptr = headptr; 


     for(i=1;i<5;i++) 
     { 

      headptr->nextPtr = (node*)malloc(sizeof(node)); 
      headptr->nextPtr->value=i; 
      headptr->nextPtr->nextPtr=NULL; 
      headptr=headptr->nextPtr; 

     } 

    } 



    int main() 
    { 
    node* topptr; 
    initializeLinkedList(&topptr); 
    printf("val is %d \n", getLength(topptr)); 
    return 0; 
    } 
1

initializeLinkedList不修改變量headptr和在主定義topptr(按值傳遞)。因此傳遞給getLength的變量包含垃圾。

+0

編輯之後,'headptr'和'topptr'是文件範圍對象,所以它不再是垃圾,而是它們是'NULL'。但診斷保持不變。 –

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

typedef struct node { 
    int value; 
    struct node *nextPtr; 
} node; 

void initializeLinkedList(node **top, node **rear){ 
    int i=0; 
    node *local; 

    *top = (node*)malloc(sizeof(node)); 
    local = *top; 
    local->value=i; 
    local->nextPtr = NULL; 
    for(i=1;i<5;++i){ 
     local->nextPtr = (node*)malloc(sizeof(node)); 
     local = local->nextPtr; 
     local->value = i; 
     local->nextPtr = NULL; 
    } 
    *rear = local; 
} 

int getLength(node *np){ 
    int i; 
    for(i=0;np!=NULL;++i, np = np->nextPtr) 
     ;//printf("debug:%d\n", np->value); 
    return i; 
} 

int main(void){ 
    node *top, *rear; 
    initializeLinkedList(&top, &rear); 
    printf("length is %d \n", getLength(top)); 
    return 0; 
}