我对C++相当陌生,并且不太了解带有指针和引用的函数参数。我有一系列的卡片,我想使用Fisher-Yates洗牌进行洗牌。甲板被宣布为
Card *deck[deckSize];
其中deckSize已声明为24。然后初始化该数组。
然后,我调用shuffle函数:
void shuffle (Card * deck[]) {
int deckSize = 24;
while (deckSize > 1) {
long int k = lrand48();
k = k %24;
deckSize--;
Card * temp = deck[deckSize];
deck[deckSize] = deck[k];
deck[k] = temp;
}
}
如果在调用随机播放功能后尝试打印卡的值,则会出现段错误。关于如何正确执行此操作的任何指示?
最佳答案
看来您的问题不是出在发布的代码上,乍看之下看起来不错,而是出在它周围的代码上。
使用标准的卡容器怎么办?您必须先将其填充,然后先打印以确认是否正常,然后随机播放,然后再次打印。
#include <vector>
std::vector<Card> deck; // Empty for now. Must be filled with cards.
void shuffle (std::vector<Card> & deck)
{
int deckSize = 24;
while (deckSize > 1)
{
long int k = lrand48();
k = k %24;
deckSize--;
Card temp = deck[deckSize];
deck[deckSize] = deck[k];
deck[k] = temp;
}
}