perchè se la funzione StampaSchede la richiamo all'interno di Elabora funziona e se la chiamo nel main non funziona? Come devo modificare il codice per fare in modo di far funzionare StampaSchede quando lo richiamo nel main?codice:#include <stdio.h> #include <stdlib.h> #include <malloc.h> #ifndef _SCHEDA_DEFINED #define _SCHEDA_DEFINED typedef struct scheda { char nome[15]; char cognome[15]; char email[30]; char telefono[15]; } SCHEDA; #endif int Allunga ( SCHEDA ***PpTesta, // puntatore al puntatore all'array dei puntatori int *Pn // puntatore al numero di elementi allocati ); int CercaPosto ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Nelementi // numero di elementi allocati ); void EliminaScheda ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Indice // indice nell'array del puntatore alla scheda ); void RiempiScheda ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Indice, // indice nell'array del puntatore alla scheda char *Info1, char *Info2, char *Info3, char *Info4 // informazioni da memorizzare ); void StampaSchede ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Nelementi // numero di elementi allocati ); void Elabora ( SCHEDA **Ptesta, int Nelementi ); int main(void) { SCHEDA **Ptesta; // puntatore all`array dei puntatori int Nelementi; // numero di elementi allocati Ptesta = NULL; Nelementi = 0; Elabora(Ptesta,Nelementi); StampaSchede (Ptesta, Nelementi); system("PAUSE"); return 0; } void Elabora ( SCHEDA ****Ptesta, int Nelementi ) { int i,Nuova; char Info[100]; for (i=1; i<=10; i++) { Nuova = CercaPosto (Ptesta, Nelementi); if (Nuova < 0) if ( Allunga(&Ptesta, &Nelementi) == 0 ) // allocazione avvenuta Nuova = Nelementi - 1; // l`ultimo elemento if (Nuova < 0) printf ("\n *** Impossibile inserire altri elementi ***\n"); else { sprintf (Info, "Elem n.%3d",i); printf("\n%s",Info); RiempiScheda (Ptesta, Nuova, Info, Info, Info, Info); } } } int Allunga ( SCHEDA ***PpTesta, // puntatore al puntatore all'array dei puntatori int *Pn // puntatore al numero di elementi allocati ) { SCHEDA **Temp; int Errore = -1; Temp = (SCHEDA **)realloc(*PpTesta, (*Pn+1)*sizeof(SCHEDA*)); if (Temp != NULL) { Temp[*Pn] = (SCHEDA *)malloc(sizeof(SCHEDA)); if (Temp[*Pn] != NULL) { *PpTesta = Temp; Temp[*Pn]->nome[0] = '\0'; // marca la scheda come disponibile Temp[*Pn]->cognome[0] = '\0'; Temp[*Pn]->email[0] = '\0'; Temp[*Pn]->telefono[0] = '\0'; (*Pn)++; // senza le parentesi verrebbe incrementato Pn Errore = 0; // allocazione avvenuta con successo } } return Errore; } int CercaPosto ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Nelementi // numero di elementi allocati ) { int Indice; // Partendo dall'ultima scheda, arretra fino a trovare una // locazione disponibile o a oltrepassare l'array (-1) for ( Indice = Nelementi-1; Indice >=0 && Ptesta[Indice]->nome[0] != '\0'; Indice -- ); return Indice; } void RiempiScheda ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Indice, // indice nell'array del puntatore alla scheda char *Info1, char *Info2, char *Info3, char *Info4 // informazioni da memorizzare ) { strcpy (Ptesta[Indice]->nome, Info1); strcpy (Ptesta[Indice]->cognome, Info2); strcpy (Ptesta[Indice]->email, Info3); strcpy (Ptesta[Indice]->telefono, Info4); } void EliminaScheda ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Indice // indice nell'array del puntatore alla scheda ) { Ptesta[Indice]->nome[0] = '\0'; Ptesta[Indice]->cognome[0] = '\0'; // superfluo Ptesta[Indice]->email[0] = '\0'; // superfluo Ptesta[Indice]->telefono[0] = '\0'; // superfluo } void StampaSchede ( SCHEDA **Ptesta, // puntatore all'array dei puntatori int Nelementi // numero di elementi allocati ) { int Indice; printf ("\n-----------------------------------------------------\n"); for ( Indice = 0; Indice < Nelementi; Indice ++ ) if (Ptesta[Indice]->nome[0] != '\0') printf ("%-15s %-15s %-15s %-15s\n", Ptesta[Indice]->nome, Ptesta[Indice]->cognome, Ptesta[Indice]->email, Ptesta[Indice]->telefono); printf ("\n\n"); }