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

标签 xcode clang objective-c++

为 XCode 4.6 和新的 clang 编译器运行分析器,我看到了很多警告

Called C++ object pointer is null

即使是像这样的 protected 表达式

- (BOOL) validate: (Node*) node
{
    if (!self.hypertext) return YES;
    return self.hypertext->HasNode(node);
}

1) 我怎样才能让静态分析器相信这是被妥善保护的? 2) 在某些情况下,我可能想断言 指针不会为空。怎么办?

最佳答案

这里的问题是您没有使用指针,而是使用 ObjC 调用的结果。

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

你应该可以用一个局部变量来解决这个问题。

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

关于XCode 4.6 clang 分析器担心空 C++ 指针不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780043/

相关文章:

ios - Xcode 8 - 意外发现 nil

c++ - NSArray 如何取得 C++ 对象的所有权

ios - 查找 Mac OS X 框架时,CMake FIND_LIBRARY 变量设置为 -NOTFOUND

c++ - Objective-C C++ wrapper Incomplete definition of type 错误

ios - 如何修复Apple Mach -O-linker警告目录未找到错误

ios - 生成错误 Xcode 10 - 生成多个命令

objective-c - Xcode 'Capture OpenGL ES frame' 响应 'application not found'

c++ - Windows 上 clang 的运行时库

c++ - Clang 5.0 和 UBsan 的指针加法和整数溢出?

clang - clang 如何检查重定义?