C++ 为什么我的随机数程序输出垃圾?

C++ 为什么我的随机数程序输出垃圾?,c++,c++11,C++,C++11,我试图在5个整数的数组中显示一个随机数。我有一个从0到数组大小的整数分布。但每当我去输出数字时,有时我会得到一个垃圾值。为什么会这样 #include <iostream> #include <random> int main() { int a[5] = { 1, 2, 3, 4, 5 }; std::random_device seed; std::default_random_engine rand(seed()); std::un

我试图在5个整数的数组中显示一个随机数。我有一个从0到数组大小的整数分布。但每当我去输出数字时,有时我会得到一个垃圾值。为什么会这样

#include <iostream>
#include <random>

int main()
{
    int a[5] = { 1, 2, 3, 4, 5 };
    std::random_device seed;
    std::default_random_engine rand(seed());
    std::uniform_int_distribution<int> dist(0, sizeof(a)/sizeof(*a));
    for (int i = 0; i < 100; ++i)
        std::cout << a[dist(rand)] << "\n";
}
#包括
#包括
int main()
{
inta[5]={1,2,3,4,5};
std::随机_设备种子;
std::默认的随机引擎rand(seed());
标准:统一分布区(0,sizeof(a)/sizeof(*a));
对于(int i=0;i<100;++i)

std::cout数组索引是基于零的。对于5个元素的数组,有效索引是
0..4
。您的分布返回的值在
0..5
范围内,这是问题的根源。

由于未定义的行为-您正在访问数组
a
范围之外的元素。因为分布从
0
X
,而不是
0
X
之前的一个。你应该这样构造它

std::uniform_int_distribution<int> dist(0, sizeof(a)/sizeof(*a) - 1);
std::统一内部分布区(0,sizeof(a)/sizeof(*a)-1);

由于未定义的行为-您正在访问数组
a
边界之外的元素。请使用
dist(0,sizeof(a)/sizeof(*a)-1)
,因为分布从
0
X
而不是
0
X
之前的一个。