2014-11-02 80 views
0

我試圖在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"; 
} 
+1

由於未定義的行爲 - 您正在訪問數組'a'範圍外的元素。由於分配從'0'到'X'而不是'0'到'X'之前的一個,所以使用'dist(0,sizeof(a)/ sizeof(* a) - 1)'。 – 2014-11-02 19:50:18

回答

2

數組索引是從零開始。對於5個元素的數組,有效索引是0..4。您的分配返回0..5範圍內的值,並且是問題的根源。

-2

由於未定義的行爲 - 您正在訪問數組a範圍之外的元素。由於分配從0X而不是0之前X您應該像這樣構造它。

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