XCode 4.6 clang分析器担心空C ++指针比不能为空

时间:2013-02-08 19:35:24

标签: xcode clang objective-c++

为XCode 4.6和新的clang编译器运行分析器,我发出警告

  

被调用的C ++对象指针为空

即使是像

这样的守卫表达
- (BOOL) validate: (Node*) node
{
    if (!self.hypertext) return YES;
    return self.hypertext->HasNode(node);
}

1)我怎样才能说服静态分析仪对它进行了适当的保护? 2)在某些情况下,我可能希望断言指针不为空。怎么样?

2 个答案:

答案 0 :(得分:6)

这里的问题是你没有使用指针但是使用了ObjC调用的结果。

虽然不太可能,分析器会看到以下情况:第一次调用中返回的指针不为空,因此测试通过,第二次调用返回的指针为空。

您应该能够使用局部变量解决问题。

- (BOOL) validate: (Node*) node
{
    YourType ht = [self hypertext];
    if (!ht) return YES;
    return ht->HasNode(node);
}

答案 1 :(得分:1)

clang静态分析器显然支持函数的'nonnull'属性,用于声明指针不应为null。我不确定是否将其应用于Obj-C方法。

int bar(int*p, int q, int *r) __attribute__((nonnull(1,3)));

http://clang-analyzer.llvm.org/annotations.html#attr_nonnull