我正在尝试创建一个没有重复数字{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