V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kingddc314
V2EX  ›  分享发现

一直追随 tj 大神,却不小心在 Github 上活捉到大神忽略的一个错误!!!

  •  
  •   kingddc314 · 2016-02-16 14:19:17 +08:00 · 6046 次点击
    这是一个创建于 3198 天前的主题,其中的信息可能已经有所发展或是发生改变。

    其实和他没多大关系,但是 tj 应该是没意识到,由于值传递这样指针的置空确实没有意义
    https://github.com/clibs/list/pull/9
    在 clibs 的包括近两千 star 的项目都没人发现这个问题
    https://github.com/clibs/clib/blob/master/deps/list/list_iterator.c#L61

    17 条回复    2016-02-16 22:38:09 +08:00
    daocheng
        1
    daocheng  
       2016-02-16 14:23:34 +08:00
    2014 年的坟都挖啊
    kingddc314
        2
    kingddc314  
    OP
       2016-02-16 14:27:01 +08:00
    @daocheng 没有挖坟啦,就是看代码时发现了问题,疑惑为什么没人提,结果翻到了这个
    zcbenz
        3
    zcbenz  
       2016-02-16 14:31:31 +08:00
    任谁都会犯错的,去提个 PR 不就好了。
    matsuijurina
        4
    matsuijurina  
       2016-02-16 14:41:27 +08:00 via Android
    大神没计算机学位,接触 nodejs 以前是做 wordpress 模板的网页外包公司的设计师。 Bug 这么少已经是不可思议了。
    tedd
        5
    tedd  
       2016-02-16 14:44:30 +08:00 via iPhone
    @matsuijurina 真的?太🐃了!
    kingddc314
        6
    kingddc314  
    OP
       2016-02-16 14:46:41 +08:00
    @matsuijurina 感觉大神不是一个人,太高产了
    chmlai
        7
    chmlai  
       2016-02-16 16:17:25 +08:00   ❤️ 3
    tj 真是一个传奇的杀马特
    breeswish
        8
    breeswish  
       2016-02-16 16:30:03 +08:00
    然而.. 这个 PR 原本的意思是,设置为 NULL 可以避免以后再错误地释放它,这是一种防御性的代码,就像 assert 一样, assert 出 false 的代码根本不能跑是吧,所以 assert 里的一定是 true 的,那么为什么还要 assert 呢?显然意义不在于此,而在于可以避免以后犯错…理论上还可以提高安全性
    sethverlo
        9
    sethverlo  
       2016-02-16 16:37:16 +08:00
    @chmlai 原来不止我一个人觉得杀马特。。。
    oxoxoxox
        10
    oxoxoxox  
       2016-02-16 16:43:20 +08:00
    @breeswish 防御性代码 +1
    我写代码经常这样,方便自己以后查 /改代码,也方便别人
    aisk
        11
    aisk  
       2016-02-16 16:44:25 +08:00
    主要是用 clib 的人太少了。
    myid
        12
    myid  
       2016-02-16 18:08:14 +08:00 via iPhone
    tj 是谁?
    kingddc314
        13
    kingddc314  
    OP
       2016-02-16 18:28:29 +08:00
    @breeswish
    @oxoxoxox 其实问题是函数内部赋值为 null ,只是赋值的一个指针拷贝,在上层函数调用栈的指针依旧不为空
    snnn
        14
    snnn  
       2016-02-16 21:17:46 +08:00 via Android
    @myid 同问
    think2011
        15
    think2011  
       2016-02-16 21:30:29 +08:00
    tj 大神啊!
    kingddc314
        16
    kingddc314  
    OP
       2016-02-16 21:32:58 +08:00
    @myid
    @snnn node , go 系大神, https://github.com/tj
    breeswish
        17
    breeswish  
       2016-02-16 22:38:09 +08:00
    @kingddc314 从其他函数写法来看似乎是为了该代码内不犯错,即如果后面还加代码的话不至于有问题。不过确实如你所说,不能避免用户犯错(调用多次 list_iterator_destroy )时正常。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3295 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:20 · PVG 20:20 · LAX 04:20 · JFK 07:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.