- 论坛徽章:
- 0
|
假设我现在已经有一个链表,现在要对这个链表中的内存进行释放,那应该是逐次delete掉链表中的节点就可以了吧,代码如下:- Spoint *pDelete = NULL;
- pHead = process(vecData);// 创建链表
- showPoint(pHead);// 打印链表
- while(pHead) // 释放
- {
- pDelete = pHead;
- pHead = pHead->next;
- delete pDelete;
- }
复制代码 这样释放有问题吗?如果没问题的话我单步调试了一下,有些不解的地方
(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掉的东西在内存中的信息应该已经完全被擦空了啊,这是怎么回事呢? |
|