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

时间:2014-11-02 19:42:31

标签: c++ c++11

我正在尝试在5个整数的数组中显示一个随机数。我有一个从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";
}

2 个答案:

答案 0 :(得分:2)

数组索引从零开始。对于包含5个元素的数组,有效索引为0..4。您的分配返回0..5范围内的值,并且是问题的根源。

答案 1 :(得分:-2)

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

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