Non sapendo la quantità di input che potrebbe arrivare da STDIN, ho provato a creare una stringa che crescesse dinamicamente in funzione in funzione dell'input che arriva.

Ho quindi inizializzato una char* a NULL, e poi ho usato realloc() all'interno di un do-while.

Inserisco il codice

codice:
int main(int argc, char **argv) {
	char *buffer = NULL;
	int res, len = 0; //res è il risultato di read, len è la lunghezza attuale della stringa
	char *temp;
	do {
		temp = (char *)realloc(buffer, len+SIZE); //SIZE è il numero di char da leggere ogni volta
		if(temp == NULL) {
			perror("Errore realloc");
			break;
		}		
		else buffer = temp;
		res = read(0, (void *)&buffer[len], SIZE);
		if (res == -1) perror("Errore read");
		else len = len + res;
	} while (res > 0);
	printf("%s", buffer);
}
A parte i controlli (assenti) in caso di errore, il programma si "blocca" sempre dopo la read, mandando in stampa l'errore BAD ADDRESS.
Perchè, dato che la realloc ha funzionato con successo?