2014-11-02 16 views
0

Я пытаюсь отобразить случайное число в массиве из 5 целых чисел. У меня есть распределение int от 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"; 
} 
+1

Из-за неопределенного поведения - вы получаете доступ к элементу за пределами массива 'a'. Используйте 'dist (0, sizeof (a)/sizeof (* a) - 1)', так как распределение переходит от '0' к' X' не '0' к одному перед' X'. –

ответ

2

Массив индексов нуля. Для массива из 5 элементов действительными индексами являются 0..4. Ваше распределение возвращает значения в диапазоне 0..5 и является источником проблемы.

-2

Из-за неопределенного поведения - вы получаете доступ к элементу за пределами массива a. Поскольку распределение идет от 0 до X, а не 0 до одного доX вы должны построить его так.

std::uniform_int_distribution<int> dist(0, sizeof(a)/sizeof(*a) - 1); 
Смежные вопросы