c – Clang UBSAN报告’std :: _ Ios_Fmtflags’类型的无效值
发布时间:2020-12-16 07:12:57 所属栏目:百科 来源:网络整理
导读:当clang UBSAN编译时,以下代码将崩溃 #include stdio.h#include stdlib.h#include iostream#include sstreamtemplateclass Tinline std::string floatToString(T i){ printf("in floatToStringn"); std::stringstream ss; ss.precision(6); ss std::noshowp
当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 UBSAN时,有人可以帮助解决为什么会出现这个问题吗? 解决方法
根据
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-January/027401.html,这是libstdc中的一个错误.
仍存在于libstdc 5.1中. libc按预期工作: $clang++ -stdlib=libc++ -fsanitize=undefined -fno-sanitize=float-divide-by-zero,function -fno-sanitize-recover -o test test.cpp -lc++abi $./test in floatToString exit floatToString 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |