【问题标题】:Clang Static Analyzer unexpected NULL pointer warningClang 静态分析器意外 NULL 指针警告
【发布时间】:2023-03-20 12:55:02
【问题描述】:

我有以下代码:

int s[4096];
unsigned char o = 0;

int main(void) {
    int *n;
    return ((char *) (s + o)) == 0 ? *n : 0;
}

当我在该代码上运行 Clang 静态分析器时,它警告我正在取消引用 n,因为 (char *) (s + o) 是一个空指针,它不是(我什至可以打印它并获得一个绝对不是的地址零)。

我错过了什么?

我注意到删除 (char *) 演员表会使警告消失。

【问题讨论】:

  • 它会警告你,因为条件可以在技术上评估为真,在这种情况下你取消引用一个未初始化的指针。
  • @tkausl,这是有道理的,但我不知道在什么情况下这可能是真的。无论o 有什么价值,这仍然不是真的。这是整个程序中唯一的代码路径,所以so 都不能有除程序中的值之外的任何其他值。我还注意到删除 (char *) 演员会使警告消失。
  • 如果o大于4096,则为UB,则可能为真
  • @OznOg,但o 是一个unsigned char,所以它的值只能在0255 之间。
  • 好的,:) 我猜你对编译器的期望很高:)

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


【解决方案1】:

我正在使用 Clang 静态分析器版本 8 进行测试。版本 10 不再报告警告。

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多