2014-12-07 44 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