码迷,mamicode.com
首页 > 其他好文 > 详细

t_BSTdel操作free和赋NULL关系

时间:2016-05-06 12:29:25      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:

调研:t_zset删除操作
zslDelete(zs->zsl,score,c->argv[j])
int zslDelete(zskiplist *zsl, double score, robj *obj)
void zslDeleteNode(zskiplist *zsl, zskiplistNode *x, zskiplistNode **update)
void zslFreeNode(zskiplistNode *node
技术分享

技术分享

技术分享
zskiplistNode *node中的成员都能访问,说明zfree(node)并没有释放node, 什么时候实现回收。实际上,free(ptr)告诉操作系统回收*ptr空间(如:将该空闲块链接到可用链表),但是该块的内容并未清空,故使用ptr仍能访问*ptr空间。

注意:当ptr1和ptr2同时指向zskiplistNode时,通过zfree(ptr1)告诉操作系统回收*ptr1(zskiplistNode),但是ptr2仍然指向zskiplistNode这片空间,所以ptr2仍能访问zskiplistNode的内容。

技术分享

内存泄露,链表删除节点,使用free(ptr),和ptr = NULL之间的关系,free仅告诉os回收资源,而ptr指针仍存放这片空间的地址,指向这片空间,如果未设置读写保护,ptr依旧能访问这片空间的内容;所以free(ptr)之后,显式设置ptr为NULL,避免出现不可预期的错误(读到不该读的或写入不该写的空间)。
技术分享
技术分享
技术分享

冒号表达式使用
技术分享
lr > 0?pnode->rchild:pnode->lchild = NULL;
必须使用int i = (boolean expression)? A:B;

t_BSTdel操作free和赋NULL关系

标签:

原文地址:http://blog.csdn.net/u010217321/article/details/51328887

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!