" *Pptr = ( char *)malloc(sizeof(char *)); "
pour rappel c´est
*Pptr = ( char *) malloc ( sizeof(char))
et non pas sizeof(char *) sinon ca alloue la taille d´un pointeur soit 4 octets au lieu d´un. sizeof(qqchose *) = 4 sur nos machines 32 bits.
Plus généralement c´est :
type *ptr;
ptr = ( type *) malloc ( sizeof(type));
Et realloc c´est à éviter car cette fonction est trop souvent buggée ( fuite mémoire). Surtout pour de l´allocation répétée de petit buffer, ce qui est ton cas ! Tu peux vite saturer la mémoire vu windows gère très mal ca.
Le mieux est de passer par de la bufferisation de taille fixée. Tu allous N caractères et tu remplis tant que tu arrives pas à la fin du buffer et tu ralloues d´autant à chaque fois que tu atteints la limite :
N . .. 2*N . .. 3*N etc...
Les allocs c´est lent, très lent, on évite généralement de les utiliser dans une boucle qui demande des perfs en vitesse. C´est pour ca qu´il faut ruser un peu pour en faire le moins possible ( soit tu alloues tout au début et tu gères toi même ensuite, soit tu alloues le moins souvent possible).