I'm trying to add a card into my Vect->Items card array, but I'm getting an access writing violation in my add at the Items array address. Is there something wrong with the initialization of the vector? The access writing violation occurs at the address of initialized vector, but I don't understand why it would be an error if it's just initializing.
void VectorInit(Vector * vect, int capacity)
{
vect->size = 0; //initialize the size to 0 (no elements)
vect->capacity = capacity; //initialize capacity to 10, can grow later
vect->Items = (Card *)malloc(sizeof(Card)* vect->capacity); //alloc mem space for Items array = size of an int * capacity alloted
}
void Grow(Vector * vect)
{
int i;
if (vect->capacity < 0) //if the capacity ever reaches 0 or below, reset it to 10
vect->capacity = 10;
else
vect->capacity *= 2; // 'grow' the capacity by doubling it
Card *newStore = (Card *)realloc(vect->Items, (vect->capacity) * sizeof(Card)); //realloc size for newStore
if (!newStore)
{
newStore = (Card*)malloc(vect->Items, (vect->capacity * sizeof(Card)));
for (i = 0; i < vect->size; ++i)
{
newStore[i] = vect->Items[i]; //copy original values into larger int array
}
free(vect->Items); //free space
vect->Items = newStore; //point items int array to new int ptr
newStore = 0; //best practice
}
}
void Add(Card card, Vector * vect)
{
if (vect->size == vect->capacity) //if the num of elements = capacity, the array is full - Grow it
Grow(vect);
vect->Items[vect->size] = card; //add a provided index and value for insertion in Items array
++vect->size;//increment the size so the pointer points to the next available spot
}
.h
typedef enum {Clubs,Diamonds,Hearts,Spades} Suits;
typedef enum{Deuce = 2,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace} Face;
typedef struct card
{
Suits suit;
Face face;
} Card;
typedef struct vector
{
Card * Items; //pointer to array of cards
int size; //current num of elements
int capacity; //max num of elements
}Vector;
void VectorInit(Vector * vect, int capacity);
void Grow(Vector * vect);
void Add(Card card, Vector * vect);
main.c
Vector Deck;
VectorInit(&Deck, 52);
Card test;
test.face = (Face)2;
test.suit = (Suits)1;
Add(test, &Deck);