随机数发生器,不重复数字

时间:2014-02-13 03:23:58

标签: c++ arrays random segmentation-fault

我正在尝试创建一个随机数生成器而不重复数字{0 - 7}。

我在这里得到一个seg错误错误,我很确定我正确分配所有内存。我发现偶尔工作的一个解决方案是,如果我将shuffledbracket参数大小设置为9.但是因为它有一个额外的内存,所以它会增加0。任何想法如何让我的数组只有参数大小为8而没有一个段错误错误?

2 个答案:

答案 0 :(得分:3)

C++中的数组从0开始。因此,for循环无效。而不是:

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

应该是

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

除此之外,显然没有hehe变量。

答案 1 :(得分:2)

8不是shuffledbracket的有效索引,C ++数组的索引是0 to N-1,在本例中为0 to 7,因此您需要修改循环:< / p>

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

这引入了另一个问题,因为0的模数是undefined behavior

randnumero = rand()%i;
                   ^^

如果您想从[M,N]生成随机数,可以使用C FAQ entry How can I get random integers in a certain range?中的此公式:

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

或者您可以使用random headeruniform_int_distribution

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