मैंने अपनी परियोजना पर -fsanitize=undefined
पर स्विच किया जो कैच, इकाई परीक्षण पुस्तकालय का उपयोग करता है। कैच से एक पंक्ति को इस ध्वज द्वारा अपरिभाषित व्यवहार के कारण संकेत दिया गया था। मैं एक अलग उदाहरण बनाने में कामयाब रहे:क्या यह कोड वास्तव में अपरिभाषित है, क्योंकि क्लैंग इंगित करता है?
#include <iomanip>
#include <sstream>
int main()
{
std::ostringstream os;
os << "0x" << std::setfill('0') << std::hex;
}
साथ संकलित:
clang++ -fsanitize=undefined main.cpp
अगर मैं इस चलाने के लिए, निम्न प्रिंट दिया जाता है:
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../include/c++/4.9.2/bits/ios_base.h:96:24: runtime error: load of value 4294967221, which is not a valid value for type 'std::_Ios_Fmtflags'
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../include/c++/4.9.2/bits/ios_base.h:76:67: runtime error: load of value 4294967221, which is not a valid value for type 'std::_Ios_Fmtflags'
यह बजना 3.6.0
पर मेरे लिए होता है और clang 3.4-1ubuntu3
के साथ एक दोस्त के लिए। यह मेरे लिए जीसीसी संस्करण 4.9.2
पर ऐसा नहीं होता है तो यहां क्या है? क्या यह कोड वास्तव में बुरा है, या क्या क्लैंग के अंत में कुछ ख़राब चल रहा है?
बस 'ओएस << std :: हेक्स;' इस मुद्दे को पुन: उत्पन्न करने के लिए भी लगता है। – dyp
http://stackoverflow.com/questions/20617788/using-memory-sanitizer-with-libstdc शायद यह? –
मुझे एक और वर्णनात्मक शीर्षक पसंद आएगा लेकिन मुझे एक के साथ आने में मुश्किल हो रही है। –