Salve a tutti!

Ho fatto un programmino Agenda, che è stato implementato come array di struct.

Il programma è finito, ma il mio unico problema è che il prof. lo vuole con array di struct allocati dinamicamente.

Se volessi inserire un nuovo contatto nell'agenda, come devo allocare la memoria?

Cioè come faccio a capire come riallocare la memoria per aggiungere lo spazio necessario al nuovo contatto, senza perdere i dati precedentemente salvati nel mio array di struct?

Da tre giorni ci lavoro ed ancora non ho trovato la soluzione...Cosa devo controllare?

Vi ringrazio...

Spero di essere stato chiaro...
Vi allego anche il codice...

Codice PHP:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>

typedef struct
        
{
          
int ID;
          
char Cognome[32];
          
char Nome[32];
        } 
Persona;

void InserisciPersona *New , int *n);
void stampaPersona *List , int n );

int main()
{
  
Persona *Contatti;
  
int start/* Num di contatti */
  
  
start 0;
  
Contatti NULL;

  
InserisciContatti , &start );  
  
stampaContatti start );

  
system("PAUSE");
  return 
0;
}

void InserisciPersona *New , int *)
{
  
int idim;
  
  
dim=*n;
  
/* Se è la prima volta che inserisco */
  
if ( dim == 
  { 
    
/* Aggiungo dim++ = 1 elemento */   
    
dim++;
    
/* Alloco lo spazio */
    
New =(Persona*) malloc sizeof Persona ) );
    
/* Per i che va da 0 a 1 */
    
for(i=0i<dim i++)
    {
      
/* Il primo id è 1 */
      
New[i].ID=dim;       
      
/* Prendo il nome ed il cognome */
      
printf("Cognome: ");
      
scanf("%s" , New[i].Cognome);
      
printf("Nome: ");
      
scanf("%s" , New[i].Nome);
    } 
    
/* Restituisco al main la dimensione aggiornata */
    
= &dim;
  }
  
/* Se ci sono elementi nell'Array */
  
else
  {
    
    
/* Aggiungo un elemento ai presenti */
    
dim = *n;
    
dim++;
    
    
/* Rialloco lo spazio aggiungendo dim = dim+1 elemento */ 
    
New =(Persona*) realloc ( New , dim );
  
    for(
i=0i<dim i++)
    {
      New[
i].ID=dim;
      
/* Prendo il nome ed il cognome */
      
printf("Cognome: ");
      
scanf("%s" , New[i].Cognome);
      
printf("Nome: ");
      
scanf("%s" , New[i].Nome);    
    }
  }
}


void stampaPersona *List , int n )
{
  
int i;   
  for(
i=0i<i++)
  {
    
printf("%s %s\n" , List[i].Cognome , List[i].Nome);
  }
  
system("PAUSE");