为什么 Clang 静态分析器认为这是 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);
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...