Clang静态分析器警告“调用CFRelease中的空指针参数”

问题描述:

在Xcode 4.6中,铿锵静态分析器警告我有关“调用CFRelease中的空指针参数”。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永远不能是空指针,可以吗?我已经学会了比我使用的工具更不信任自己,所以我在这里问。如果有人向我解释我错过了什么,我会很高兴。

+3

'如果分配失败,'CFUUIDCreate()'可能返回'NULL',但分析器警告的逻辑错误。 '-UUID'在'-setUUID:'中没有改变,所以无论uuid是否为空,'aUUID'仍然可以为空。 –

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

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

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