3

在 Xcode 4.6 中,clang 静态分析器警告我“调用 CFRelease 时出现空指针参数”。

这是分析器警告的屏幕截图:

Clang 静态分析器警告

这是您想要复制和粘贴的代码:

- (void)test
{
    CFUUIDRef aUUID = CFUUIDCreate(kCFAllocatorDefault);
    [self setUUID:aUUID];
    CFRelease(aUUID);
}

- (void)setUUID:(CFUUIDRef)uuid
{
    _uuid = uuid ? CFRetain(uuid) : CFUUIDCreate(kCFAllocatorDefault);
}

我不明白它为什么警告我。aUUID永远不能是空指针,可以吗?我已经学会了不信任自己而不是我正在使用的工具,所以我在这里问。如果有人向我解释我所缺少的,我会很高兴。

4

1 回答 1

0

理论上,任何返回分配值的东西都可能返回 NULL。

分析器遵循多种可能的执行路径。在遵循“aUUID 为 NULL”的情况时,它最终以 NULL 对象的 CFRelease 结束。

这不是setUUID原因,这只是发现问题的路径,所以这就是说明的路径。

于 2013-04-26T19:59:29.637 回答