我对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;
    }
}

09-08 11:38