salve a tutti!
sono nuovo del forum, avrei un quesito da proporre a voi che sicuramente siete più esperti.
Ho quest'esercizio:
In un file binario è memorizzata una sequenza non ordinata di numeri(pari e dispari);
il numero di questi interi è dispari;
dichiarare, chiamare e definire opportune funzioni che sono in grado di allocare in memoria dinamica, una matrice quadrata la cui dimensione è uguale all'elemento che sta al centro della sequenza;
inizializzare la matrice con tutti gli interi presenti nel file (escluso l'intero che stabilisce la dimensione);
riempire le restanti celle della matrice allocata con zero.

ho abbozzato qualche riga di codice ma... non funge; qualcuno di voi può darmi una mano?
vi ringrazio in anticipo

codice:
#include<stdio.h>
#include<stdlib.h>

int** carica(int*,int***);
void stampa(int,int***);  

int main(void)
{
	
	int** matrice=NULL;
	int dim=0;
	matrice=carica(&dim,&matrice);
	stampa(dim,&matrice);
	return 0;
}

int** carica(int* dim, int*** mat)
{
FILE* fp;
int i,j,ele;
int conta=0;
int k=0;
int z=0;  // indice del vettore
int* vett;

fp=fopen("immagine.dat","rb");

while(!feof(fp))
	conta++;  //voglio sapere il numero degli elementi

conta= conta/2;  // ho il numero degli elementi della prima parte

rewind(fp); 

for(i=0;i<conta+1;i++)
	fread(dim,sizeof(int), 1, fp);

rewind(fp);

//allocazione dinamica vettore
conta=conta*2;    // vettore di soli elementi escluso l'elemento centrale del file binario
vett=malloc(sizeof(int)*conta);
i=0;

for(;i<conta/2;i++)
	fread(&vett[i],sizeof(int),1,fp);

	fseek(fp,4,1); //salto i 4 byte dell'elemento centrale

	for(;i<conta/2;i++)
		fread(&vett[i],sizeof(int),1,fp);

	fclose(fp);
//allocazione dinamica matrice

*mat=malloc((*dim)*sizeof(int*));

	for(i=0;i<*dim;i++)
		*mat[i]=malloc(sizeof(int)*(*dim));


/*inserimento in matrice*/


for(i=0;i<*dim && z<conta;i++)
	{
		
		for(j=0;j<*dim && z<conta;j++)
			{
			(*mat)[i][j]=vett[z];
			z++;
			}
		
	}

	if(z==(*dim)*(*dim))     //caso particolare in cui il numero degli elementi dell'array concide esattamente con gli elementi della matrice
		return *mat;

		
	else if(j==*dim)
			{
				i++;    // altrimenti passa alla nuova  riga
				j=0;
				if(i==*dim)
					return *mat;
			}

// ora avrò i e j corrispondenti alla posizione dove comincia l'assegnamento degli zeri


	while(j!=*dim)
	{
		(*mat)[i][j]= 0; // completo la riga di zeri
		j++;
	}


for(;i<*dim;i++)
	{
		for(j=0;j<*dim ;j++)
			{
			(*mat)[i][j]=0;
			}
	}
return *mat;
 
}

void stampa(int dim, int*** mat)
{
	int i,j;
	for(i=0;i<dim;i++)
	{
		for(j=0;j<dim;j++)
		{
			printf("%d\t", (*mat)[i][j]);
		}
		printf("\n\n");
	}

}