使用指针,随机播放功能不起作用

时间:2014-11-18 15:54:17

标签: c++

我最近开始使用c ++,我创建了一个名为Deck的类,几乎可以创建一副卡片。它的一个功能是洗牌。我在Deck中创建了一个main()类型的对象,并且能够调用shuffle()成员函数...这有效!但是,当我使用指针访问shuffle()函数时,Xcode突出显示:

Card u1 = *(cards[index]); 

和输出:

Thread 1:EXC_BAD_ACCESS (code = EXE_1386_GPFLT) 

有人可以帮助我吗?

void Deck::shuffle()
{
    srand(static_cast<unsigned int>(time(0)));

    for(size_t x = 0;x<cards.capacity();x++)
    {
        int index = rand()%51;
        int index2 = rand()%51;

        Card u1= *(cards[index]);
        *cards[index] = *cards[index2];
        *cards[index2] = u1;
    }
}

int main()
{
    //Deck p;
    //p.shuffle(); //works!
    //p.Display();//works!
    Deck *p;
    p->shuffle(); //does not work!
}

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个错误。

指向无处的指针

Deck *p;
p->shuffle(); //does not work!

你刚刚创建了一个指向牌组的指针。指针指向的实际牌组在哪里?

你应该做

Deck* p = new Deck;
p->Shuffle();

Deck theDeck;
Deck* p = &theDeck;
p->Shuffle();

迭代直到大小,而不是容量

for(size_t x = 0;x<cards.capacity();x++)

您不能访问矢量容量中的所有元素。您应该使用x < cards.size()

卡不是指针,是

您的cards容器是否包含指向卡片的指针?如果它包含实际的卡片,而不是指向它们的指针,则您的交换例程不应使用解除引用(*cards[index] - &gt; cards[index]

52张牌,不是51张

顺便说一下,如果cards有52个元素,那么你应该rand()%52,而不是51。