Se usi la malloc e a è già un array di puntatori, non c'è necessità di passare attraverso un altro puntatore.

Ti basta


codice:
  if(i==n) {
     a[i] = (char *) malloc(strlen(v)+1);
    strcpy(a[i], v);
    n++;
  }
Occhio ! Non usare sizeof ma strlen()+1