2014-12-07 58 views
0

我無法解決下面的函數中的錯誤。該函數的目的是按照升序將數字插入鏈表中。<0xC0000005>插入鏈接列表時出錯

當列表爲空/插入第一個節點時,此函數可以正常工作,但在嘗試插入節點後出現錯誤Process returned -1073741819 <0xC0000005>

Node *orderedInsert(Node *p, int newval) 
{ 
    Node* q = (Node*)malloc(sizeof(Node)); 
    q->data = newval; 
    if(p == NULL || newval <= p->data) 
    { 
     q->next = p; 
     return q; 
    } 
    else 
    { 
     Node* tmp = p; 
     while(tmp != NULL && tmp->data <= newval) 
     { 
      tmp = tmp->next; 
     } 
     q->next = tmp->next; 
     tmp->next = q; 
     return p; 
    } 
} 

我意識到0xC0000005錯誤代表訪問衝突;並試圖進行調試時,我注意到訪問tmp->next不會給我任何預期的結果:我猜我的tmp節點有什麼關閉,我只是不知道什麼以及如何解決它。

任何人都可以幫助我瞭解我做錯了什麼嗎?

回答

1

問題是你插入一個過去的地方,你需要插入。這意味着如果您插入的節點具有最大值,則您將到達tmp爲NULL的末尾,然後您將嘗試將tmp->next設置爲q。您可能希望使用prev指針,該指針是tmp後面的一個元素,因此您可以改爲插入prev

+0

甜。那正是我的問題。謝謝你的好解釋! – BloopyBlop 2014-12-07 06:02:42