鱼C论坛

 找回密码
 立即注册
查看: 1500|回复: 4

[已解决]链表删除结点函数,在free节点时报错

[复制链接]
发表于 2023-11-24 00:11:52 | 显示全部楼层
问题出在ListInsert函数中,你在定义s时使用了sizeof(Node*),这是一个指针的大小,而不是Node结构体的大小。所以,正确的写法应该是sizeof(Node)。

这里是修改后的代码:
  1. static inline Status ListInsert(CirLinkList& L, int i, ElemType e)
  2. {
  3.     CirLinkList p = L;
  4.     if (i < 1 || i > L->data + 1)
  5.     {
  6.         return ERROR;
  7.     }
  8.     for (int j = 0; j < i - 1; j++)
  9.         p = p->next;
  10.     CirLinkList s = (CirLinkList)malloc(sizeof(Node));
  11.     if (s)
  12.     {
  13.         s->data = e;
  14.         s->next = p->next;
  15.         p->next = s;
  16.         L->data++;
  17.         return OK;
  18.     }
  19.     return ERROR_1;
  20. }
复制代码

至于为什么在Debug模式下会报错而Release模式不会,这是因为Debug模式下编译器会对内存进行一些额外的检查和控制,因此更容易发现和报告错误。而Release模式下为了性能考虑,这些额外的检查被省略了,所以不会报错。

希望对你有帮助!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-30 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表