Originariamente inviato da Fingard
Sempre sulle malloc, mi sta venendo un dubbio parecchio atroce:

char* alloca (int n){
char* stringa = malloc (n * sizeof(char));
return stringa;
}
cambia il nome della funzione in NewString, cosi' al chiamante è chiaro che deve rilasciarla; alloca può essere fuorviante, infatti in alcuni SO ci sono delle API che si chiamano alloc e che liberano automaticamente all'uscita dei blocchi.

Dato che ci sei, siccome hai una NewString, crea anche una FreeStringIf del tipo:
codice:
char * FreeStringIf (char * theString){
	if (NULL != theString){
		free (theString);
	}
	return NULL;
}
che puoi ad esempio utilizzare così:
codice:
int main (void){
	char * aString = NewString (1024);
	if (NULL != aString){
	// your program is handling the good string..
	
	}
	aString = FreeStringIf (aString);
	return 0;
}