为什么 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);
}
我大概是傻了:
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);
}