首页 > 其他 > 详细

t_BSTdel操作free和赋NULL关系

时间:2016-05-06 12:26:27      阅读:166      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!