内存不能写,为什么啊都疯了!解决思路
内存不能写,为什么啊,都疯了!
//对链表排序,排序后链表元素按照非递减方式排列(注意:排序时如果要交换两个结点的顺序,不得通过交换结点的内容,而需要使用改变指针的方式交换结点的位置。建议使用直接插入排序算法)
Linklist* SortLinklist(Linklist **h)
{
Linklist *p,*q,*r,*s,*k;
if (!*h)
{
printf("表为空!");
return NULL;
}
k=*h;
*h=NULL;
while (k)
{
if (!*h)
{
q=k;
k=k->next;
*h=q;
q->next=NULL;
free(q);
}
else
{
if (k->data<=(*h)->data)
{
q=k;
k=k->next;
q->next=*h;
*h=q;
}
else
{
q=k;
k=k->next;
r=*h;
s=r->next;
while (s&&(r->data<=q->data))
{
r=s;
s=s->next;
}
if(s==NULL)
{
r->next=q;
q->next=NULL;
}
else
{
r->next=q;
q->next=s;
}
}
}
}
return *h;
------解决方案--------------------
你调试状态下,那句不能写?
------解决方案--------------------
帮顶下
------解决方案--------------------
*h=NULL;
这句之后就没有h什么事了,,应该是k
------解决方案--------------------
单步调试,上传错误代码给大家看看,才能帮你分析问题
------解决方案--------------------
free(q);
为什么要调用释放内存?
都被你释放了(实际上释放的是开始传进来的列表的头),后面肯定没法用了!那么,写不进去是正常的。
free(q)后,如果执行了r=*h; s=r->next;那么必出错!
------解决方案--------------------
应该是程序某个地方出错了
指针指向了不可写的区域 楼主检查下代码吧
//对链表排序,排序后链表元素按照非递减方式排列(注意:排序时如果要交换两个结点的顺序,不得通过交换结点的内容,而需要使用改变指针的方式交换结点的位置。建议使用直接插入排序算法)
Linklist* SortLinklist(Linklist **h)
{
Linklist *p,*q,*r,*s,*k;
if (!*h)
{
printf("表为空!");
return NULL;
}
k=*h;
*h=NULL;
while (k)
{
if (!*h)
{
q=k;
k=k->next;
*h=q;
q->next=NULL;
free(q);
}
else
{
if (k->data<=(*h)->data)
{
q=k;
k=k->next;
q->next=*h;
*h=q;
}
else
{
q=k;
k=k->next;
r=*h;
s=r->next;
while (s&&(r->data<=q->data))
{
r=s;
s=s->next;
}
if(s==NULL)
{
r->next=q;
q->next=NULL;
}
else
{
r->next=q;
q->next=s;
}
}
}
}
return *h;
------解决方案--------------------
你调试状态下,那句不能写?
------解决方案--------------------
帮顶下
------解决方案--------------------
*h=NULL;
这句之后就没有h什么事了,,应该是k
------解决方案--------------------
单步调试,上传错误代码给大家看看,才能帮你分析问题
------解决方案--------------------
free(q);
为什么要调用释放内存?
都被你释放了(实际上释放的是开始传进来的列表的头),后面肯定没法用了!那么,写不进去是正常的。
free(q)后,如果执行了r=*h; s=r->next;那么必出错!
------解决方案--------------------
应该是程序某个地方出错了
指针指向了不可写的区域 楼主检查下代码吧