为什么 Clang 静态分析器认为这是 use-after-free?

Why does Clang static analyzer think that this is use-after-free?

我大概是傻了:

    fileref_t *fref;

    while (gli_filereflist != NULL)
    {
        fref = gli_filereflist;
        if (fref != NULL)
        {
            glk_fileref_destroy(fref);   <-------- Use of memory after it is freed
            fref = NULL;
        }
    }

这是在我添加 NULL 检查并在 free() 之后将 fref 显式设置为 NULL 之后。

Xcode 12.3。原码here.

如果这是一个误报,有没有办法让它沉默?

编辑:gli_filereflist 是一个链表,当第一个被销毁时,它将指向列表中的下一个项目。

这有效:

    while (gli_filereflist)
    {
        fref = gli_filereflist;
        gli_filereflist = gli_filereflist->next;
        glk_fileref_destroy(fref);
    }