检测UB样锈蚀
Detect UB like Rust
两个简化示例:
#include <cstdlib>
#include <string>
#include <vector>
class Object{};
void use1(Object * o)
{
(void)(o);
}
void use2(std::string & s)
{
(void)(s);
}
int f1()
{
Object * object_ptr{ nullptr };
{
Object object{};
object_ptr = &object;
}
use1(object_ptr); // UB
return rand();
}
int f2()
{
std::vector<std::string> v{"foo", "bar"};
auto & v_ref = v[0];
v.emplace_back("baz");
use2(v_ref); // UB
return rand();
}
int main()
{
return f1() + f2();
}
(rand()
仅用于测试。)
Rust就是不能编译这样的源代码。对于Clang或GCC(或者MSVC?),是否有检测这种未定义行为的选项?
开箱即用,不行。C++不像铁锈,它能给你一种射中自己脚的力量。
幸运的是,静态分析器可以为您检测错误。有了clang静态分析器,一个生命周期检查器肯定会链接到邮件列表消息,并可能满足您的需求。
如果你有记忆错误,你可以用valgrind来检测它们,它有时对我很有用。
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 正在LLVM中检测整数比较条件
- 如何在鼠标挂钩过程中检测拖动
- 位移操作和位掩码未检测到重复字符
- 检测 COFF 对象文件中C++内联符号
- qmake:检测目标位宽(32 位或 64 位)
- 增强精神解析器规则以检测语句中的特殊结尾
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 用于C++的静态二进制检测或二进制重写工具和框架
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- 检测UB样锈蚀