我正在尝试创建一个随机数生成器而不重复数字{0 - 7}。
我在这里得到一个seg错误错误,我很确定我正确分配所有内存。我发现偶尔工作的一个解决方案是,如果我将shuffledbracket参数大小设置为9.但是因为它有一个额外的内存,所以它会增加0。任何想法如何让我的数组只有参数大小为8而没有一个段错误错误?
答案 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 header和uniform_int_distribution:
std::uniform_int_distribution<int> dist(0, i);