2015-01-17 20 views
-1

我遇到了一個函數的問題,它打算在列表的末尾添加一個節點。它似乎工作正常() 問題是:當我在野牛文件中調用此函數後,我有一個分段錯誤。調試器明確指出錯誤來自該函數。 當我編譯瓦特/ -Wall -Werror我遇到錯誤control reaches end of non-void function [-Werror=return-type]C編程控制達到非空/分段故障的結束

這裏是我的功能:

int addNode(Node *n, list List) { 
    list *pList = (list *)malloc(sizeof(list)); 
    *pList = List; 

    if (List == NULL) { 
    List = n; 
    } else { 
    while (((*pList)->next) != NULL) { 
     pList = &((*pList)->next); 
    } 
    (*pList)->next = n; 
    return (0); 
    } 
} 

我看到另一個線程的返回INTreturn(0);代替無效最後可以解決這個錯誤,但在我的情況下它不起作用。 如果有人有一絲 提前感謝

+0

'列表* PLIST =(列表*)malloc的(的sizeof(列表)); * pList = List;'這條線對我來說沒有意義。無論如何,你只在'else'部分返回'0'。 – Sadique

+0

如果'next'是一個指針,在'pList =&((* pList) - > next);'&符號是多餘的並導致錯誤。 – Arashium

+0

什麼是'list'?你知道指針是什麼嗎? – hyde

回答

1
list *pList = (list *)malloc(sizeof(list)); 
*pList = List; 

你想

list *pList = &List; /* There is no need to call malloc */ 

控制到達非void函數

末因爲你沒有當返回任何東西(List == NULL)

這是錯誤的:

while(((*pList)->next) != NULL){ 
      pList = &((*pList)->next); 
    } 

pList是一個指針,而不是一個指向指針,更改爲:

while (pList->next != NULL) { 
      pList = pList->next; 
    } 
+0

好的,謝謝,它現在工作正常 – OrangeAmps