Я пытаюсь создать простую карточную тасовку и симулятор. Я использую вектор, представляющий колоду из 52 карт, и каждая карта представлена структурой BitCard
, чьи пространства элементов ограничены битовыми полями. Но когда конструктор пытается получить доступ к вектору, xCode выдает BAD_ACCESS exception: Thread 1: EXC_BAD_ACCESS (code =1 address = 0x0)
. Я провел некоторое исследование и обнаружил, что это исключение связано с нулевым указателем, но не может понять, как его исправить. Мой код выглядит следующим образом:Тема 1: EXC_BAD_ACCESS (код = 1 адрес = 0x0)
#include <iostream>
#include <cctype>
#include <cstdlib>
#include <vector>
#include <iomanip>
using namespace std;
struct BitCard{
unsigned face:4;
unsigned color:1;
unsigned suit:2;
};
class DeckOfCards {
public:
static const int faces = 13;
static const int colors = 2;
static const int numberOfCards = 52;
DeckOfCards();
void shuffle();
void deal();
private:
vector <BitCard> deck={};
};
DeckOfCards::DeckOfCards(){
for (int i = 0; i <numberOfCards;++i){
deck[i].face = i%faces;
deck[i].suit = i/faces;
deck[i].color = i/(faces*colors);
}
}
void DeckOfCards:: shuffle(){
for (int i = 0; i <numberOfCards;i++){
int j = rand()%numberOfCards;
BitCard tmp = deck[i];
deck[i] = deck[j];
deck[j] = tmp;
}
}
void DeckOfCards:: deal(){
for (int k1 = 0, k2 = k1+numberOfCards/2;k1<numberOfCards/2-1;k1++,k2++)
{
cout << "Color:" << setw(3) << deck[k1].color
<< " Card:" << setw(3) << deck[k1].face
<< " Suit:" << setw(3) << deck[k1].suit
<< " Color:" << setw(3) << deck[k2].color
<< " Card:" << setw(3) << deck[k2].face
<< " Card:" << setw(3) << deck[k2].suit;
}
}
int main(int argc, const char * argv[]) {
DeckOfCards testDeck;
testDeck.shuffle();
testDeck.deal();
return 0;
}
Исключение генерируется в соответствии
deck[i].face = i%faces;
Как я могу это исправить? Спасибо заранее!
Несвязанный: 'неподписанный цвет: 1;' дал мне одиннадцать воспоминаний Океана. «Прочитайте их и плачьте люди: * Все красные !! *» – WhozCraig