双链表删除操作时,free处弹出对话框,求解释谢谢

ytlcainiao 2013-03-31 12:36:43

p=getnode(t,i); //getnode()为得到删除的i节点的前一个节点
if(p==NULL)
printf("wei zi error a");
else
{
p->prio->next=p->next;
p->next->prio=p->prio;

free(p); //运行完此句后,错误。其中i节点信息已删除,错误如下图
}


请问下面的话是什么意思啊?


Windows 已在 rr.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 rr.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 rr.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。



...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ytlcainiao 2013-04-01
  • 打赏
  • 举报
回复
引用 3 楼 h_w_m 的回复:
C/C++ code ? 123456789101112 if(p==NULL) printf("wei zi error a"); else{ if(p->prio) //避免操作首结点之前 p->prio->next=p->next; else t = p->next;//删除首结点还要把首指针要后移 if(p……
还是不行 应该考虑尾节点
ytlcainiao 2013-03-31
  • 打赏
  • 举报
回复
上面getnode是得到删除的节点位子,不好意思打错了
h_w_m 2013-03-31
  • 打赏
  • 举报
回复
if(p==NULL)
	printf("wei zi error a");
else
{
	if(p->prio) //避免操作首结点之前
		p->prio->next=p->next;
	else
		t = p->next;//删除首结点还要把首指针要后移
	if(p->next) //避免操作尾结点之后
		p->next->prio=p->prio;
	free(p);
}
不能修改,发错了只得再回复一个,修改了点,删首结点时的问题
h_w_m 2013-03-31
  • 打赏
  • 举报
回复

if(p==NULL)
	printf("wei zi error a");
else
{
	if(p->prio) p->prio->next=p->next; //避免操作首结点
	if(p->next) p->next->prio=p->prio; //避免操作尾结点
	free(p);
}

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧