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

Why does my random number program output garbage?

本文关键字:输出 程序 我的 随机数 为什么      更新时间:2023-10-16

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

#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";
}

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

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

std::uniform_int_distribution<int> dist(0, sizeof(a)/sizeof(*a) - 1);