我最近开始使用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!
}
答案 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]
)
顺便说一下,如果cards
有52个元素,那么你应该rand()%52
,而不是51。