鱼C论坛

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

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

[复制链接]
发表于 2023-11-24 00:13:07 | 显示全部楼层
代码中有几个问题可能导致内存溢出和释放错误:

1. 在初始化链表函数InitLinkList中,分配内存的语句应该是L = (CirLinkList)malloc(sizeof(Node));,而不是L = (CirLinkList)malloc(sizeof(Node*));。因为sizeof(Node*)是指针的大小,而我们实际需要的是结点的大小。

2. 在创建链表函数CreateList_Tail中,分配内存的语句应该是p = (CirLinkList)malloc(sizeof(Node));,而不是p = (CirLinkList)malloc(sizeof(Node*));。同样的原因,我们需要分配结点的大小。

3. 在删除结点函数ListDelete中,需要先判断要删除的位置是否合法,即if (i < 1 || i > L->data + 1)。因为循环链表的结点个数为L->data,所以判断条件应为i > L->data 而不是 i > L->data - 1

请你修改以上代码中的这些问题,然后再编译运行看看是否还会报错。同时,Debug模式和Release模式的区别是Debug模式下编译器会进行更多的检查和调试信息输出,因此在调试程序时可以方便地定位错误。而Release模式下则会进行一些优化,生成的可执行文件体积较小、运行速度较快,但对于错误的检测和定位可能会不够详细。因此,在调试阶段建议使用Debug模式,而发布正式版本时可以使用Release模式。

回复来自于CHAT-GPT。回复仅供参考,如有人工回答,最佳答案请优先选择人工
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-2 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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