Clang静态分析器警告“调用CFRelease时出现空指针参数”

时间:2013-02-06 11:07:50

标签: objective-c c xcode memory-management clang-static-analyzer

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

以下是分析仪警告的屏幕截图:

Clang Static Analyzer Warning

这是代码,以防你要复制&粘贴它:

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

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

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

1 个答案:

答案 0 :(得分:0)

返回分配值的任何内容理论上都可以返回NULL。

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

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