Premetto che uso gcc da ubuntu e che non ci sono errori di compilazione ne di esecuzione.
fatto sta che quando invoco la stampa mi butta fuori caratteri incomprensibili e anche in quantità sbagliata.
Qui c'è tutto il codice, non capisco cosa non va . Grazie dell'aiuto

codice:
void completa(tree RADICE, char * tavola, int ord){
    if (!(Is_Empty(RADICE))) {
	Valore(RADICE);
	int cx,cy;
	
	if(minY<0) cy = abs(minY)-ret[1];
	else cy = abs(minY)+ret[1];
		
	if(minX<0) cx = abs(minX)-ret[0];
	else cx = abs(minX)+ret[0];
		
	*(tavola+cx*ord+cy)='X';
		
	completa(Nord(RADICE), tavola, ord);
	completa(Ovest(RADICE), tavola, ord);
	completa(Est(RADICE), tavola, ord);
	completa(Sud(RADICE), tavola, ord);
    }
    return;
}

void disegna(tree RADICE, char *tavola){
    int i,j;
    int o = ordine();
    tavola = (char *) calloc (o*o, sizeof(char));
    for(i=0;i<o;i++)
	for(j=0;j<o;j++)
	    *(tavola + i*o + j) = ' '; 
    completa(RADICE, tavola, o);
    *(tavola+abs(minX)*o+abs(minY))='O';
    
    return;
}

void stampa(char *tavola, int o){
    int i,j;
    
    for(i=0;i<o;i++)
	for(j=0;j<o;j++)
	    printf("%c",(*(tavola + i*o + j)));
	printf("\n");

    return;	
    
}
Chiamante:
codice:
char *tav;
disegna(mosaico,tav);
stampa(tav,o);