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