免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2487 | 回复: 8
打印 上一主题 下一主题

[C++] 关于链表释放内存问题~~~~~~~~~~~~~~~~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-19 15:08 |只看该作者 |倒序浏览
假设我现在已经有一个链表,现在要对这个链表中的内存进行释放,那应该是逐次delete掉链表中的节点就可以了吧,代码如下:
  1. Spoint *pDelete = NULL;
  2. pHead = process(vecData);// 创建链表
  3. showPoint(pHead);// 打印链表
  4. while(pHead) // 释放
  5. {
  6.         pDelete = pHead;
  7.         pHead = pHead->next;
  8.         delete pDelete;
  9. }
复制代码
这样释放有问题吗?如果没问题的话我单步调试了一下,有些不解的地方
(gdb)
1001 aaa
1002 bbb
1004 ddd
1005 eee
special:1005
258                     while(pHead)
(gdb)
260                             pDelete = pHead;
(gdb)
261                       pHead = pHead->next;
(gdb)
262                       delete pDelete;
(gdb)
258                     while(pHead)
(gdb)
260                             pDelete = pHead;
(gdb)
261                       pHead = pHead->next;
(gdb) p *pDelete
$1 = {id = 1002, name = "bbb\000\000\000\000\000\000", next = 0x609380, father = 0x609500, brother = 0x609400, special = 0x0} ——这是第二个节点
(gdb) p *pDelete->father
$4 = {id = 0, name = "\000\000\000\000\000\000\000\000\000", next = 0x609480, father = 0x0, brother = 0x0, special = 0x0} 就是这里有点疑问,按道理我已经将第一个节点释放掉了啊,为什么还可以通过father地址访问到第一个节点呢?我的理解是如果delete掉的东西在内存中的信息应该已经完全被擦空了啊,这是怎么回事呢?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-02-19 15:14 |只看该作者
指针存地址, 地址就是一个整形, 并且地址指向的内存也没人重用, 所以你可以通过指针访问, 并且访问的内容还是老的内容.

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
3 [报告]
发表于 2013-02-19 15:34 |只看该作者

额 LZ貌似老鸟了啊,怎么对这个问题还有疑问

论坛徽章:
0
4 [报告]
发表于 2013-02-19 15:58 |只看该作者
captivated 发表于 2013-02-19 15:34
额 LZ貌似老鸟了啊,怎么对这个问题还有疑问


跟你比起来我还小的很呢,指针木有搞透啊

论坛徽章:
6
技术图书徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13处女座
日期:2014-06-16 17:43:33午马
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2013-02-19 16:14 |只看该作者
卖萌可耻{:3_183:}

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
6 [报告]
发表于 2013-02-19 17:48 |只看该作者
释放内存和内存置0是两回事
freshxman 该用户已被删除
7 [报告]
发表于 2013-02-19 18:04 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2013-02-19 22:03 |只看该作者
新人学习下。

论坛徽章:
0
9 [报告]
发表于 2013-02-20 00:16 |只看该作者
回复 1# 七夜未央

你释放的应该是指针指向的地址
这样:
char a[10]=............
*p = a;
*d = a;
然后:
*p=NULL
你猜*d是什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP