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

问题描述 投票:2回答:1

我正在使用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实例?

c++ undefined-behavior clion
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.