Allora questi sono il codice del main e il codice che uso per allocare nella matrice, per assegnarle dei valori
codice:
int main()
{
    FILE *fp;
    char nome_f[80];
    unsigned char ***mat;
    
    char pr;
    int a,l,offset;
    
    printf("Inserisci il nome del file su cui operare: ");
    gets(nome_f);
    
    fp = fopen(nome_f,"rb");
    

    if(fp == NULL)
    {
        printf("File non trovato!\n");
        system("pause");
    }
    else
    {   
        carica_mat(&mat,&a,&l,&pr,&offset,fp);
  
        ingrandisci(fp,nome_f,&mat,a,l,pr,offset);
    }
    
    close(fp);
    
    system("pause");

    return 0;
}

void alloca(unsigned char ****m,int r, int c, int p)
{ 
     int i,j;
     
     *m = malloc(r*sizeof(unsigned char*));
     if(*m == NULL)
           printf("Errore 1!!!!");
     
     for(i = 0; i < r; i++)
     {
        (*m)[i] = malloc(c*sizeof(unsigned char*));
        if(*m == NULL)
           printf("Errore 2!!!!");
        
        for(j = 0; j < c; j++)
        {
              (*m)[i][j] = malloc(p*sizeof(unsigned char));
              if(*m == NULL)
                    printf("Errore 3!!!!");
        }
     }
     
        
} 

void carica_mat(unsigned char ****m,int *r, int *c, char *p, int *offset, FILE *f)
{
     int i,j,k;
     
     dim_imm(f,r,c,p,offset);
     alloca(m,*r, *c, *p);
     
     rewind(f);
     fseek(f,*offset,SEEK_CUR);
     
     for(i = 0; i < *r; i++)
           for(j = 0; j < *c; j++)
                 for(k = 0; k < *p; k++)
                       fread(m[i][j][k], sizeof(char),1,f);
     
}

void dim_imm(FILE *f, int *r, int *c, char *p, int *offset)
{
     rewind(f);
     
     fseek(f,10,SEEK_CUR);
     fread(offset,sizeof(int),1,f);
     
     fseek(f, 4, SEEK_CUR);
     fread(c, sizeof(int), 1, f);
     fread(r, sizeof(int), 1, f);
     
     fseek(f,2,SEEK_CUR);
     fread(p,sizeof(char),2,f);
     *p /= 8;
     
     rewind(f);

     return;
}