I have some code to create a new struct and allocate some space for an array of structs. Initially, I allocate space for 1 struct on the array:
static int datasetCount = 0;
int datasetgroup_new(DatasetGroup *dg char *id){
  dg->id = id;
  // Allocate space for a single dataset to start with
  dg->datasets = (Dataset *) malloc(sizeof(Dataset));
  return 0;
}
I then have a function to add another struct ('dataset') to the struct containing the array. At the end of the function, I reallocate the array to provide another space:
void datasetgroup_add(DatasetGroup *dg, string filePath){
  // Create the dataset
  Dataset ds;
  dataset_new(&ds, filePath);
  // Copy the dataset to the dataset array
  dg->datasets[datasetCount] = ds;
  // Increment the dataset counter
  datasetCount++;
  //Grow the array
  dg->datasets = (Dataset *)realloc(dg->datasets, sizeof(Dataset) * (datasetCount + 1));
}
I keeping reading things that hint that in modern C you don't need to do stuff like this. I may be wrong...so is the a more modern/correct way to do this?
Edit:
Sorry, to be clear that I am not using C++ types, I have created a typedef for string:
typedef char* string;