Clang++ UBSAN 报告类型 'std::_Ios_Fmtflags' 的无效值
Clang++ UBSAN reports invalid value fro type 'std::_Ios_Fmtflags'
以下代码在由clang UBSAN 编译时将崩溃
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
template<class T>
inline std::string floatToString(T i){
printf("in floatToStringn");
std::stringstream ss;
ss.precision(6);
ss << std::noshowpoint << i;
printf("exit floatToStringn");
return ss.str();
}
int main() {
std::cout << floatToString(1.0) << "n";
return 0;
}
用Clang 3.6编译:
$>clang++-3.6-fsanitize=未定义-fno消毒=浮点除以零,vptr,function-fno净化恢复-o测试.cpp
然后程序崩溃:
$>/测验在floatToString中/usr/bin//lib/gcc/x86_64-linux-gnu/4.8/../../../include/c++/4.8/bits/ios_base.h:96:24:运行时错误:加载值4294966271,该值对于类型"std::_ios_Fmtflags"无效
有人能帮我解释为什么当我打开clang UBSAN时会出现这个问题吗?
根据http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-January/027401.html.
仍然存在于libstdc++5.1中。
libc++如预期工作:
$ clang++ -stdlib=libc++ -fsanitize=undefined -fno-sanitize=float-divide-by-zero,vptr,function -fno-sanitize-recover -o test test.cpp -lc++abi
$ ./test
in floatToString
exit floatToString
1
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 错误:无效的预处理指令 #i 的意思是 #if?
- ios::fmtflags 在 C++ 中是如何工作的?setf() 是如何工作的?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 从 'int' 到 'int*' CPP 的转换无效
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 数组下标的类型"float*[float]"无效