我是C ++的初学者,我刚刚接触了一些新的C ++ 11内容,在这种情况下来自" random"中的随机数。
我写了一个简单的函数,它接受整数,开始和结束。这些整数显然标志着随机数应该是闭合区间的开始和结束。
功能:
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预览。