c++ 即使是一个g++标志也会警告空指针解引用吗?

ssm49v7z  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(165)

我想检查是否存在一个g++编译器标志来警告我nullpointer-derefecting。使用g++ (GCC) 13.1.1和这些编译器标志编译此代码时:-Wnull-dereference-Wnonnull,仍然没有任何React。没有警告,没有错误。

#include <iostream>

auto main([[maybe_unused]] int argc, [[maybe_unused]] char ** argv) -> int {

  double *elem = new (std::nothrow) double;
  elem = nullptr;
  std::cout << *elem << '\n';

  delete elem;
  return 0;
}

所以我尝试了控制static analysis的选项:我只遇到了这两个:-Wanalyzer-null-argument-Wanalyzer-null-dereference(仍然没有成功)。真的没有办法做到吗?请注意,我知道clang-tidy和其他静态分析工具,如***cpplint,clazy和cppcheck***,它们成功地报告了这类问题。但是我想只依赖于编译标志。

bhmjp9jg

bhmjp9jg1#

-Wnull-dereference的文档中:
此选项仅在-fdelete-null-pointer-checks处于活动状态时才处于活动状态,大多数目标中的优化都启用了此选项。警告的精度取决于所使用的优化选项。
启用优化(-O1就足够了),你会得到警告。
-Wnonnull做了完全不同的事情。(另请参阅上面的文档链接。)
-Wanalyzer-*选项仅在您启用-fanalyzer静态分析器时生效,并且它们是默认值。这些选项用于-Wno-*表单中,以禁用特定的静态分析器检查。参见documentation as well

n6lpvg4x

n6lpvg4x2#

真的没有办法做到吗?
通过启用如below所示的优化:

-O3 -Wnull-dereference

Working demo
正如您在使用优化标志时所看到的,您将得到所需的警告。

相关问题