moi je dirais plutot :
unsigned char (*mat)[50]; // pointeur de tableau de 50 caracteres
unsigned char *mat[50]; // tableau de 50 pointeur de caracteres
dans les deux cas mat est un : unsigned char * *
le bon code est en fait celui la :
void main(void) {
unsigned char *mat[50];
alloue(mat);
}