精易论坛

标题: 带头的单链表和双链表 [打印本页]

作者: LLJ    时间: 2023-5-8 19:38
标题: 带头的单链表和双链表
本帖最后由 LLJ 于 2023-5-8 20:23 编辑

List.e (12.9 KB, 下载次数: 83)
带头的链表,是在头结点之前添加一个额外的节点,也称为“哨兵节点”或“虚拟节点”或“哑元节点”。这个节点不存储任何实际的数据,只是用于简化链表操作,使链表为空的情况无需判断处理,链表的头部和尾部操作变得更加统一。


作者: 福仔    时间: 2023-5-8 19:42
给个小建议, 分配内存如果命名为malloc的话, 还是就直接调用c函数的malloc吧, 你这个容易让人搞混, 等下让人真以为是调用c函数的malloc
作者: LLJ    时间: 2023-5-8 19:47
本帖最后由 LLJ 于 2023-5-8 19:57 编辑
福仔 发表于 2023-5-8 19:42
给个小建议, 分配内存如果命名为malloc的话, 还是就直接调用c函数的malloc吧, 你这个容易让人搞混, 等下让 ...

c函数的 malloc 也是分配堆内存,应该无差异,也可以直接调用c函数的 malloc。由于 malloc 易语言没有,所以不用考虑名称冲突和混淆。当然如果确实冲突和混淆,因为是开源的,所以你可以改名,或者直接删除然后去调用c函数,不影响效果。

作者: 福仔    时间: 2023-5-8 19:57
LLJ 发表于 2023-5-8 19:47
c函数的 malloc 也是分配堆内存,应该无差异,也可以直接调用c函数的 malloc由于 malloc 易语言没有,所以 ...

额, 只是小建议, 如果是申请的堆内存, 然后用free释放的话, 在c++里是会有异常的, 所以一般用什么申请就用配套的释放函数
malloc -> free
HeapAlloc -> HeapFree
LocalAlloc -> LocalFree
GlobalAlloc -> GlobalFree

作者: 福仔    时间: 2023-5-8 20:01
福仔 发表于 2023-5-8 19:57
额, 只是小建议, 如果是申请的堆内存, 然后用free释放的话, 在c++里是会有异常的, 所以一般用什么申请就 ...
  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
p整数型 
i整数型 
计次循环首 (200, i)
p = HeapAlloc (GetProcessHeap (), 0, 4096 × 4096)
写到内存 (i, p, 4)
free_c (p)
计次循环尾 ()
调试输出 (“结束”)


i支持库列表   支持库注释   
spec特殊功能支持库


比如这样的, 这个free_c 就是c函数的释放, 我这里测试调用200次就崩了
作者: LLJ    时间: 2023-5-8 20:10
本帖最后由 LLJ 于 2023-5-8 20:11 编辑
福仔 发表于 2023-5-8 20:01
[e=1]
.版本 2
.支持库 spec

是的,根据反汇编
[Asm] 纯文本查看 复制代码
ucrtbase.malloc_base+17 - 56                    - push esiucrtbase.malloc_base+18 - 6A 00                 - push 00 { 0 }
ucrtbase.malloc_base+1A - FF 35 DC121B76        - push [ucrtbase.dll+1112DC] { (00810000) }
ucrtbase.malloc_base+20 - FF 15 F4201B76        - call dword ptr [ucrtbase.dll+1120F4] { ->ntdll.RtlAllocateHeap }
malloc() 确实是调用 HeapAlloc() 不同在于第一个参数应该不是通过 GetProcessHeap() 获取的,应该是C库自己调用 HeapCreate() 创建的堆。
作者: 福仔    时间: 2023-5-8 20:15
LLJ 发表于 2023-5-8 20:10
是的,根据反汇编[mw_shl_code=asm,true]ucrtbase.malloc_base+17 - 56                    - push esiucr ...

所以才提个小建议, 命名是malloc就用c函数的malloc, 不然代码写多了都得猜一下这次调用的malloc到底是c函数的, 还是自己写的malloc....
我就因为翻译别人代码吃过这个亏, 看见别人调用的是malloc就直接用free了
结果各种崩, 后面才知道这个malloc是封装的malloc, 也就是 malloc 不是 malloc......
作者: pipicool    时间: 2023-5-8 20:59
学习一下
作者: zifeiyu    时间: 2023-5-8 22:27
6666666666666666666666
作者: 一指温柔    时间: 2023-5-9 08:53
感谢分享,很给力!~
作者: 就是你了    时间: 2023-5-9 11:51
感谢分享,很给力!~
作者: 无精打采    时间: 2023-5-9 12:56
6666666666666666666666666666666
作者: 396384183    时间: 2023-5-9 22:48

感谢分享,很给力!~
作者: nameliuhaobo    时间: 2023-5-13 05:52
good6666666666
作者: c799330775    时间: 2023-5-31 09:28
6666666
作者: DMS千    时间: 2023-7-6 10:12
6666666666666
作者: DMS千    时间: 2023-7-8 16:24
6666666666666666666666666
作者: DMS千    时间: 2023-7-8 16:25
66666666666666666666666666666666666666666666666
作者: 576003133    时间: 2023-8-2 09:57
支持你开源精神
作者: 576003133    时间: 2023-8-2 09:58
下载看看,好东西。算法吧
作者: lm88818    时间: 2023-12-4 17:41
支持开源~!感谢分享
作者: anbuzz    时间: 2024-4-2 17:24
看看 怎么个事 希望有用
作者: 小磊88    时间: 2024-4-2 19:02
很实用,就喜欢这样的资料。
作者: 木木的树    时间: 2024-4-4 22:41
开源精神必须支持~
作者: gqohui455    时间: 2025-1-6 21:56
开源精神必须支持~
作者: xzc1215    时间: 2025-3-5 07:40
感谢大佬分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4