Salve, questo codice mi da un errore di segmentazione che non riesco a risolvere nonostante vari tentativi. Queste sono le strutture:

codice:
struct Prodotto{
     char tipo[20];
     int quantita[N_PROD];
}Prodotto[N_PROD] = {{"Caffe"},{"Tessuti"},{"Spezie"},{"Legno"},{"Ceramiche"}};

typedef struct {
     int data;
     struct Prodotto venduto;
}Giornata;

typedef struct {
     char nome[20];
     char cognome[20];
     int codice;
     Giornata* giornata[MAX_GIORNI];
}Agente;

Questa è la funzione che da problemi. Viene chiamata da un'altra funzione che le passa i due parametri, a sua volta ricevuti dal main. La prima funzione li usa e non da problemi. Questa va in segmentazione sulla scanf indicata dalla freccia:

codice:
void creaGiornate(Agente* ag, int i) {
     int j, num_giorni;
     
     printf("Quante giornate hai lavorato in questo mese?  ");
     scanf("%d", &num_giorni);
     for(j = 0; j < num_giorni; j++) {
          ag[i].giornata[j] = (Giornata*)malloc(sizeof(Giornata));
          if(ag[i].giornata[j] == NULL) {
               printf("Errore di allocazione!\n");
               return;
          }
          printf("Inserisci il %d%c giorno di lavoro(da 0 a 30)", i + 1, 167);
  -->> scanf("%d", &ag[i].giornata[j]->data);
          inserisciVenduto(ag, i, j);
     }
     return;
}

Ho provato a passare doppi puntatori, a rendere "giornata" vettore di struct, o anche solo struct(ma a quel punto non va bene la malloc perche restituisce sempre un puntatore).
L'idea è una serie di Agenti(chieste all'utente), per ogni agente una serie di giornate(chieste all'utente), per ogni giornata la quantità venduta di ognuno dei prodotti. Potrei farlo con le liste e credo sarebbe più comodo, ma vorrei risolverlo prima così.
Se serve per testarlo posto tutto il codice.