2014-02-13 58 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