2014-02-13 77 views
1

我正在嘗試創建一個沒有重複數字{0 - 7}的隨機數字發生器。沒有重複數字的隨機數字發生器

即時得到一個seg故障錯誤在這裏,我敢肯定即時分配所有內存正確的那裏。我偶然發現的一個解決方案是,如果我將shuffledbracket參數大小設置爲9.但是因爲它有一個額外的內存,它將放入一個額外的0.任何有關如何讓我的數組只有8參數大小的想法seg故障錯誤?

回答

2

8不是一個有效的索引shuffledbracket的一個C++數組的索引0 to N-1,在這種情況下0 to 7,所以你需要修改你的循環:

for (int i = 7; i >= 0; i--) 
      ^^^ ^^^ 

這帶來了另一個問題,因爲通過0undefined behavior

randnumero = rand()%i; 
        ^^ 

如果你想生成[M,N]你可以使用這個公式從一個隨機數:

M + rand()/(RAND_MAX/(N - M + 1) + 1) 

,或者您可以使用random headeruniform_int_distribution

std::uniform_int_distribution<int> dist(0, i); 
+0

我試過了,但它返回了一個浮點異常錯誤 – user3298889

+0

正如他所解釋的那樣,零係數是未定義的行爲。 –

+0

好吧,我剛剛做了蘭特()%(i + 1) – user3298889

3

陣列在C++0開始。因此您的for循環無效。相反的:

for (int i = 8; i > 0; i--) 

應該

for (int i = 7; i >= 0; i--) 

除此之外,還有顯然沒有hehe變量。

+0

當然它返回一個浮點異常錯誤 - 最後一次迭代會做'蘭特()%0'。你必須改變這條線。 –

+0

明白了,我只是做了rand()%(i + 1)。 – user3298889