C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) Win10 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) VC++ 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 问题(Question): 最近因为在网路上自学课程而接触C++ 上课时跟着老师写了一个Linked List 但老师因为课程时间的因素没有把destructor的部分在课堂上写出来 我试着自己写了一个destructor 但因为对於指标这部分真的没有理解透彻 所以不确定这样是不是正确的 请问我89行开始的destructor有清除到List里的资料吗? 或者只是把dn这个Node清除掉而已? 如果没有清除到List里的资料 该怎麽写才能做到? 喂入的资料(Input): 预期的正确结果(Expected Output): 错误结果(Wrong Output): 程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档) https://ideone.com/18SKGh 补充说明(Supplement): --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.108.127 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1591345219.A.2FF.html
1F:推 poolongkong: 94行的 “Node *” 宣告要拿掉 06/05 17:13
2F:推 poolongkong: 89行的dn跟94行的dn不是同一个 06/05 17:18
3F:→ poolongkong: 因为delete在93行 所以delete看到的dn 永远都是89行 06/05 17:20
4F:→ poolongkong: 的dn 06/05 17:20
5F:推 poolongkong: 写了一个超简易的说明范例 06/05 17:34
6F:→ poolongkong: https://ideone.com/movZ9U 06/05 17:34
7F:→ Ruination: 你的意思是说这样只能delete到first_node而後面的node 06/05 17:35
8F:→ Ruination: 都delete不到吗? 06/05 17:35
9F:推 poolongkong: 对的 而且我看编译的错误讯息有说是double free 06/05 17:41
10F:→ poolongkong: 代表你对同一个address delete两次了 06/05 17:42
11F:→ Ruination: 所以只要把94行的Node*拿掉就能确实delete整个List了 06/05 17:45
12F:→ Ruination: 是吗? 06/05 17:45
13F:推 poolongkong: 逻辑对了 但执行上还是会有错误 06/05 17:51
14F:→ poolongkong: 在进入最後一次的loop iteration中 dn应该是最後一 06/05 17:54
15F:→ poolongkong: 个node 而ndn会是NULL 但是在delete之後 又会将他们 06/05 17:54
16F:→ poolongkong: 分别往後推一格 等於是说 dn等於NULL 而ndn等於NULL 06/05 17:54
17F:→ poolongkong: 的next 这边就会有问题了 06/05 17:54
18F:→ Ruination: 是的 我改完之後丢回VC++执行的确出了错误回报 所以改 06/05 18:04
19F:→ Ruination: 成针对ndn的while回圈并加了一个ct计算执行次数做确认 06/05 18:04
20F:→ Ruination: https://ideone.com/DJsqRp 06/05 18:04
21F:→ Ruination: 另外想请问有没有什麽方法能确认自己new出来的记忆体 06/05 18:04
22F:→ Ruination: 有没有被确实delete掉? 06/05 18:04
23F:→ poolongkong: 确认的话 应该是可以啦 但好像没有很简单的方法 可 06/05 18:09
24F:→ poolongkong: 能要等其他大神补充 06/05 18:09
25F:→ poolongkong: 或是你搜寻一下关於”找出memory leak”的文章 06/05 18:10
26F:→ Ruination: 好的 感谢poo大 06/05 18:11
27F:→ poolongkong: 另外就是 目前这样的写法其实满不好的 推荐你试试看 06/05 18:15
28F:→ poolongkong: 把目前的写法改成List class的destructor 06/05 18:15
29F:→ poolongkong: 不客气~ 我目前想到一个比较hardcode的确认方法 每 06/05 18:17
30F:→ poolongkong: 次new之後都印出address 每次delete之前也都印出add 06/05 18:17
31F:→ poolongkong: ress来比对看看 XD 06/05 18:17
32F:→ Ruination: 好的 我再研究看看 06/05 18:33
33F:推 james80351: 用valgrind 06/05 18:36
34F:→ james732: linked list强烈搭配IDE的单步执行来练习 06/05 19:07
35F:→ james732: 我第一次玩的时候觉得超感动的 (?) 06/05 19:07
36F:→ loveme00835: 要看你所谓的 "leak" 是要侦测什麽东西, 在用 ctor/ 06/06 17:31
37F:→ loveme00835: dtor 改变物件的 lifetime 以外, 还需要考虑这个物件 06/06 17:32
38F:→ loveme00835: 本身占据的记忆体是否有被释放, ctor/dtor 能够管理 06/06 17:32
39F:→ loveme00835: 的仅仅只有它的 sub-object 可能占据的记忆体而已, 06/06 17:33
40F:→ loveme00835: 为了让使用者能更好好地控管所有资源, C++允许你多载 06/06 17:34
41F:→ loveme00835: new/delete operator, 你可以透过为特定类别多载 06/06 17:35
42F:→ loveme00835: new/delete 来追踪物件的使用情形, 就像这个范例一样 06/06 17:36
43F:→ loveme00835: https://wandbox.org/permlink/aRJMu6Y4zlQiFZkU 06/06 17:36
44F:→ loveme00835: 因为物件占据的空间是可以被重复使用的, 所以 ctor 06/06 17:37
45F:→ loveme00835: /dtor 无法做到更细致的追踪, 所以不只是 placement 06/06 17:38
46F:→ loveme00835: new, 连 array new 都会需要去多载来获得所有资讯 06/06 17:39
47F:推 flarehunter: 改用unique_ptr帮你delete,还能让ownership更清楚 06/07 08:48
48F:推 flarehunter: https://ideone.com/zIxRvx 06/07 09:29







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP