g ++ 4.9 sanitizer bug,cin解析linux上的boolean(ubuntu 12.04 64-bit)

时间:2015-11-11 01:00:40

标签: c++ linux gcc g++ sanitizer

这看起来像是一个g ++错误(可能与消毒剂有关),但是我想知道是否有人有铿锵声(鉴于gcc消毒剂来自clang afaik),或者不同的g ++版本,会有不同的结果吗?

这是一个简单的程序,它从用户的stdin中读取3个值,尝试解析它们并打印它们(我还会显示cin标志的状态,以防有人想要它们)

#include <iostream>
using namespace std;
int main ()
{
        bool c1, c2, c3;
        cin >> c1 >> c2 >> c3;
        cout << boolalpha << "Good: " << cin.good();
        cout << " Bad: " << cin.bad();
        cout << " Fail: " << cin.fail();
        cout << " EOF: " << cin.eof();
        cout << endl;
        cout << c1 << ", " << c2 << ", " << c3 << ", " << endl;
        return 0;
}

以下是我的shell在没有清理程序的情况下编译时显示的内容,并使用用户提供的值“true false 1”运行:

0:48:03: 0 aho@ubuntu ~/dev/cpp$ g++  -Wall  cpp1.cc -o a.out -g3  && ./a.out
true false 1
Good: false Bad: false Fail: true EOF: false
false, false, false, 

我发现有点令人惊讶的是它没有打印“true,true,true”(我认为只有'0'会被解析为false,而其他任何事情都是真的),但这就是重点。这是多汁的一点:添加消毒剂标志,但提供相同的输入显示不同的结果:

0:48:21: 0 aho@ubuntu ~/dev/cpp$ g++  -Wall  cpp1.cc -o a.out -g3  -fsanitize=address -fsanitize=leak -fsanitize=undefined && ./a.out
true false 1
Good: false Bad: false Fail: true EOF: false
cpp1.cc:12:45: runtime error: load of value 23, which is not a valid value for type 'bool'
false, false, true, 

最终细节(如果你想要更多的话,可以使用lmk)

gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~12.04)
Linux ubuntu 3.8.0-44-generic #66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:3)

{p> The whole nsqlQuery.php file just in case.默认为for chunk in df: print chunk 关闭。如上所述,您的程序需要数字标记,即plt.plot() print df.head() print df.describe() print df.dtypes customer_group3 = df.groupby('UserID') y3 = customer_group.size() 。要支持cin之类的输入,您需要启用1 0 1

true false true