clang静态分析 - 检查执行流程的null-able变量初始化

时间:2016-10-12 11:58:42

标签: c++ clang clang-static-analyzer

有可能通过clang-check来证明某些执行流程是否无法访问?因此,例如,可以发生null de-reference?

例如,在val< = 2传递给foo的情况下,ptr仍然等于nullptr。

resignFirstResponder()

谢谢。

1 个答案:

答案 0 :(得分:1)

证明?否。

图灵的暂停问题表明,您无法证明一般程序的所有属性。从根本上说,没有程序("静态分析工具")可以决定任意谓词是(总是)是真还是(总是)假。

因此,您无法构建静态分析器,而无法正确地告诉您此代码有时会产生空指针:

 p* x=null;
 if (somefunction())
    x=&...;
 return x;

[在OP的例子中,他如何期望该工具确定val不总是大于2?]

您可以构建一个启发式工具,可以轻松地确定函数可能返回true或false。在这种情况下,它可以报告" x可能为空"。坏消息是,您的分析现在可能会报告此代码的许多变化。如果这些报告是误报,那么程序员会很快拒绝您的工具,因为这是浪费时间。

有许多静态分析工具对可能发生的事情的评估做了什么,通常不会报告这一切以避免大量的误报。