c++ - 如何静态捕捉明显的未定义行为?

标签 c++ undefined-behavior clion

我正在使用 clion 并且正在运行一些具有 UB 的代码。我的目标是静态捕获它:

#include <iostream>
#include <vector>



int main() {
    auto v = std::vector<int>();
    v.push_back(20);
    auto &first = v[0];
    auto vector_ref = &v;
    vector_ref->clear();
    std::cout << first;

}

这是UB,我正试图捕获它。

我已将以下内容添加到我的 cmake 项目中:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -O1 -fno-omit-frame-pointer -g")

我仍然没有收到警告。

我必须启用什么才能捕获此类 UB 实例?

最佳答案

一些编译器可以静态检测一些 UB。除了在标准中指定的某些情况下(在常量表达式中),不需要编译器来检测任何 UB。

what do I have to enable so that I can catch such UB instances?



您能做的最好的事情就是启用所有警告。如果编译器没有检测到它,那么修改编译器来这样做。这可能非常困难,或者编译时间非常昂贵,或者两者兼而有之。

sanitizer 只能在运行时提供帮助。

关于c++ - 如何静态捕捉明显的未定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60805512/

相关文章:

C++ WinAPI 旧式窗口

c++ - 为 void 类型部分特化参数包参数的语法是什么?

c - 返回复合文字

c++ - 未初始化变量的后果 : int vs unsigned char

c - 未定义的行为 : when attempting to access the result of function call

c++ - 在 CLion 中编译简单程序时出错

c++ - vector : namespace std 的重载运算符 +

c++ - 对 `` CLion 的 undefined reference

javascript - 将 Emscripten 集成到 Clion 中

c++ - 为什么这个 sizeof 运算符会出错?