我正在嘗試創建一個沒有重複數字{0 - 7}的隨機數字發生器。沒有重複數字的隨機數字發生器
即時得到一個seg故障錯誤在這裏,我敢肯定即時分配所有內存正確的那裏。我偶然發現的一個解決方案是,如果我將shuffledbracket參數大小設置爲9.但是因爲它有一個額外的內存,它將放入一個額外的0.任何有關如何讓我的數組只有8參數大小的想法seg故障錯誤?
我正在嘗試創建一個沒有重複數字{0 - 7}的隨機數字發生器。沒有重複數字的隨機數字發生器
即時得到一個seg故障錯誤在這裏,我敢肯定即時分配所有內存正確的那裏。我偶然發現的一個解決方案是,如果我將shuffledbracket參數大小設置爲9.但是因爲它有一個額外的內存,它將放入一個額外的0.任何有關如何讓我的數組只有8參數大小的想法seg故障錯誤?
8
不是一個有效的索引shuffledbracket
的一個C++數組的索引0 to N-1
,在這種情況下0 to 7
,所以你需要修改你的循環:
for (int i = 7; i >= 0; i--)
^^^ ^^^
這帶來了另一個問題,因爲通過0
模undefined behavior:
randnumero = rand()%i;
^^
如果你想生成[M,N]
你可以使用這個公式從一個隨機數:
M + rand()/(RAND_MAX/(N - M + 1) + 1)
,或者您可以使用random header和uniform_int_distribution:
std::uniform_int_distribution<int> dist(0, i);
陣列在C++
從0
開始。因此您的for
循環無效。相反的:
for (int i = 8; i > 0; i--)
應該
for (int i = 7; i >= 0; i--)
除此之外,還有顯然沒有hehe
變量。
當然它返回一個浮點異常錯誤 - 最後一次迭代會做'蘭特()%0'。你必須改變這條線。 –
明白了,我只是做了rand()%(i + 1)。 – user3298889
我試過了,但它返回了一個浮點異常錯誤 – user3298889
正如他所解釋的那樣,零係數是未定義的行爲。 –
好吧,我剛剛做了蘭特()%(i + 1) – user3298889