< 0000005>插入链接列表时出错

时间:2014-12-07 05:29:54

标签: c list pointers memory

我在解决以下功能中的错误时遇到问题。该函数的目的是按升序将数字插入链表中。

当列表为空/插入第一个节点时,此函数正常工作,但在尝试插入节点后,我收到错误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 个答案:

答案 0 :(得分:1)

问题是您要插入一个过去需要插入的位置。这意味着如果您插入的节点具有最大值,您将到达tmp为NULL的末尾,然后您将尝试将tmp->next设置为q。您可能希望使用prev指针作为tmp后面的一个元素,因此您可以在prev处插入。