C++ 无重复数的随机数发生器

C++ 无重复数的随机数发生器,c++,arrays,random,segmentation-fault,C++,Arrays,Random,Segmentation Fault,我正在尝试创建一个随机数生成器,而不重复数字{0-7} 我在这里得到一个seg错误,我很确定我在那里正确分配了所有内存。我发现偶尔有效的一个解决方案是将shuffledbracket参数大小设置为9。但是,由于它有一个额外的内存,所以它额外添加了一个0。关于如何使数组的参数大小仅为8而不出现seg错误,有什么想法吗?在C++中,数组从0开始。因此,您的for循环无效。而不是: for (int i = 8; i > 0; i--) 应该是 for (int i = 7; i >=

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


我在这里得到一个seg错误,我很确定我在那里正确分配了所有内存。我发现偶尔有效的一个解决方案是将shuffledbracket参数大小设置为9。但是,由于它有一个额外的内存,所以它额外添加了一个0。关于如何使数组的参数大小仅为8而不出现seg错误,有什么想法吗?

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

for (int i = 8; i > 0; i--)
应该是

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

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

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

for (int i = 8; i > 0; i--)
应该是

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

>除此之外,显然没有<代码>何何 >变量.< > >代码> 8 < /COD>不是一个有效的索引到“代码> SuffFeldFutux/Cuff>”,C++数组的索引是“代码> 0到N-1 ”,在这种情况下,代码> 0到7 < /代码>,因此需要修改循环:

for (int i = 7; i >= 0; i--)
           ^^^    ^^^
这引入了另一个问题,因为
0
的模数是:

如果要根据
[M,N]
生成随机数,可以使用以下公式:

或者您可以使用和:

std::统一内部分布区(0,i);

<代码> >代码> 8代码>代码>不是一个有效的索引,它是一个C++代码数组的索引,它是代码> 0到N-1 < /代码>,在这种情况下,代码> 0到7 < /代码>,所以你需要修改你的循环:

for (int i = 7; i >= 0; i--)
           ^^^    ^^^
这引入了另一个问题,因为
0
的模数是:

如果要根据
[M,N]
生成随机数,可以使用以下公式:

或者您可以使用和:

std::统一内部分布区(0,i);

正如他所解释的,模数为零是一种未定义的行为。只要仔细检查一下我上面发布的内容,就可以了,对吗?@user3298889它应该可以正常工作,但为了将来的参考,上面的方法更好。正如他所解释的,按零取模是未定义的行为。请仔细检查我上面发布的内容,对吗?@user3298889它应该可以正常工作,但供将来参考,上面的方法更好。当然,它返回浮点异常错误-最后一次迭代将执行
rand()%0
。你必须更改那一行。明白了,我刚刚做了rand()%(i+1)。当然,它会返回一个浮点异常错误-最后一次迭代将执行
rand()%0
。你必须改变那一行。明白了,我刚做了rand()%(i+1)。