【问题标题】:Clang static analyzer warning "Null pointer argument in call to CFRelease"Clang 静态分析器警告“调用 CFRelease 时出现空指针参数”
【发布时间】:2013-01-21 13:27:47
【问题描述】:

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

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

如果你想复制和粘贴,这里是代码:

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

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

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

【问题讨论】:

  • CFUUIDCreate() 可能会在分配失败的情况下返回NULL,但分析器警告的逻辑是错误的。 aUUID-setUUID: 中没有变化,所以无论uuid 是否为空,aUUID 仍然可以为空。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多