Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c “叮当作响的静态分析仪警告”;调用CFRelease时的Null指针参数;_Objective C_C_Xcode_Memory Management_Clang Static Analyzer - Fatal编程技术网

Objective c “叮当作响的静态分析仪警告”;调用CFRelease时的Null指针参数;

Objective c “叮当作响的静态分析仪警告”;调用CFRelease时的Null指针参数;,objective-c,c,xcode,memory-management,clang-static-analyzer,Objective C,C,Xcode,Memory Management,Clang Static Analyzer,在Xcode 4.6中,clang静态分析器警告我“调用CFRelease时出现空指针参数” 以下是analyzer警告的屏幕截图: 下面是代码,以备复制和粘贴: - (void)test { CFUUIDRef aUUID = CFUUIDCreate(kCFAllocatorDefault); [self setUUID:aUUID]; CFRelease(aUUID); } - (void)setUUID:(CFUUIDRef)uuid { _uuid

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

以下是analyzer警告的屏幕截图:

下面是代码,以备复制和粘贴:

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

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

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

任何返回已分配值的内容在理论上都可能返回NULL

分析器遵循多个可能的执行路径。当遵循“aUUID为NULL”场景时,它最终会在NULL对象的CFRelease处结束

这并不是因为
setUUID
是原因,这只是发现问题的路径,所以这就是所示的路径。

CFUUIDCreate()
在分配失败的情况下可能返回
NULL
,但analyzer警告的逻辑是错误的
aUUID
-setUUID:
中没有更改,因此无论
uuid
是否为空,
aUUID
仍然可以为空。