我无法解决以下函数中的错误。该函数的目的是将数字按升序插入到链表中。
当列表为空/插入第一个节点时,此函数工作正常,但我收到错误 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
有问题节点,我只是不太知道什么以及如何修复它。
谁能帮助我理解我做错了什么?
最佳答案
问题是您在需要插入的地方插入了过去。这意味着如果您插入的节点具有最大值,您将到达 tmp
为 NULL 的末尾,然后您将尝试设置 tmp->next
到q
。您可能想要使用位于 tmp
后面一个元素的 prev
指针,因此您可以在 prev
处插入。
关于c - <0xC0000005> 插入链表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339930/