使用函数</random>中<random>的类型时程序崩溃

时间:2015-03-13 02:01:20

标签: c++ c++11 random

我是C ++的初学者,我刚刚接触了一些新的C ++ 11内容,在这种情况下来自&#34; random&#34;中的随机数。

我写了一个简单的函数,它接受整数,开始和结束。这些整数显然标志着随机数应该是闭合区间的开始和结束。

功能:

int randomInt(int start, int end)
{
    using std::default_random_engine;
    using std::uniform_int_distribution;
    using std::random_device;

    random_device rd;
    default_random_engine engine(rd());

    uniform_int_distribution<int> dist{ start, end };

    auto res = dist(engine);

    return res;
}

当我在主函数中使用该函数执行这段代码时,程序运行正常并输出一个随机数。但是当我用一个开始和一个结尾调用该函数时,程序会以异常&#34;非法指令&#34;崩溃,并指向&#34; xutility&#34;中的第3420行。注意:代码编译,崩溃仅在运行时发生。

€dit:xutility中的错误发生在类_Rng_from_urng中,在operator()中:

_Diff operator()(_Diff _Index)
    {   // adapt _Urng closed range to [0, _Index)
    for (; ; )
        {   // try a sample random value
        _Udiff _Ret = 0;    // random bits
        _Udiff _Mask = 0;   // 2^N - 1, _Ret is within [0, _Mask]

        while (_Mask < _Udiff(_Index - 1))
            {   // need more random bits
            _Ret <<= _Bits - 1; // avoid full shift **ERROR IN THIS LINE**
            _Ret <<= 1;
            _Ret |= _Get_bits();
            _Mask <<= _Bits - 1;    // avoid full shift
            _Mask <<= 1;
            _Mask |= _Bmask;
            }

        // _Ret is [0, _Mask], _Index - 1 <= _Mask, return if unbiased
        if (_Ret / _Index < _Mask / _Index
            || _Mask % _Index == _Udiff(_Index - 1))
            return (_Ret % _Index);
        }
    }

我正在使用带有CTP 4的Visual Studio 2015预览。

0 个答案:

没有答案