Ma perche' allochi puntatori a char invece di char ?

Non deve essere

char *stringa = malloc(sizeof(char *));
e
stringa = realloc(stringa, (i + 1) * sizeof(char *));

ma

char *stringa = malloc(sizeof(char));
e
stringa = realloc(stringa, (i + 1) * sizeof(char));

P.S. Usa un titolo piu' significativo ...