Hai fatto bene a postare l' input del terminale, così è chiaro.
Innanzitutto con la realloc,siccome ritorna un puntatore a void, anche se il tipo Data* è compatibile col tipo void*,è sempre meglio effettuare un cast a Data*.
Poi tu passi come parametro Vett, che è un puntatore.
Ma il puntatore originario rimane intatto: infatti se provi a stampare dopo la chiamata a input_tutti il valore di Vett, è sempre NULL.
La input_tutti, come una qualsiasi altra funzione, fa solo una copia di quel puntatore.
Per cui alla fine della funzione avrai perso il riferimento a quella memoria.
Altra cosa: chiami la realloc senza che ci sia stata allocata memoria.Quando i=1 chiama la malloc.
Inoltre è meglio controllare che la malloc e la realloc non ritornino NULL.
Puoi usare le asserzioni di assert.h , o exit(int).
Ecco il codice corretto:
codice:int input_tutti( Data** V, int* nE ) { int i = *nE; int ctrl = 0; while( ctrl != 1 ) { i++; if(i>1) *V = (Data*)realloc( *V, i*sizeof(Data) ); else *V=(Data*)malloc(sizeof(Data)); assert(*V!=NULL); (*V)[i-1] = input_singolo(); printf( "Immettere 1 per fermare l'inserimento, immettere 0 per continuare: " ); scanf( "%d", &ctrl ); } *nE = i; return ctrl; }

Rispondi quotando