Avevi commesso un errore nel passaggio del parametro alla funzione messaggio()
Prova così : (io l'ho compilato il winxp sia con mingw che con bcc32)
codice:
#include <iostream.h>

bool messaggio( char *&testo ) 
{ 
	const char mess[] = "Questo e' il messaggio dalla funzione."; 
	/* 
	** viene allocato lo spazio per 
	** scrive il messaggio. 
	*/ 

	testo = (char*)malloc( 100 * sizeof( char ) ); 
	memset( testo, '\0', 100 ); // Questa è praticamente inutile

	/* 
	** controllo se l'allocazione della 
	** memoria ha avuto successo. 
	*/ 
	
	if( testo ) 
	{ 
		printf("stringa allocata : [%s]\n", testo ); 
		printf("da copiare : [%s]\n", mess ); 
		memcpy( testo, mess, strlen( mess )+1 ); // Copia nel buffer anche il terminatore '\0'
		printf("copiato : [%s]\n", testo ); 
		return false; 
	} 
	return true; 
} 

int main() 
{ 
	char *msg; 
	if( ! messaggio( msg ) ) 
	{ 
		printf("Allocazione da funzione ok!\n"); 
		if( msg ) 
			printf("VALORE : [%s]\n", msg); /* <--- */ 
		else 
			printf("qlc non va!"); 
	} 
	else 
		printf("allocazione non riuscita!..."); 
	
	free( msg ); 
	return 0; 
}