我正在使用 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/