Quando deallochi è importante vedere come hai allocato.
In generale puoi adottare questa regoletta, ogni malloc vuole una free.
Nel tuo caso immagiono abbia allocato la matrice nel seguente modo:
int **m = (int **)malloc(x*sizeof(int *);
for(i=0; i<x; ++i)
m[i]=(int *)malloc(y*sizeof(int);
quindi la deallocazione segue il processo inverso:
for(i=0; i<x; ++i)
free(m[i]);
free(m);
Se poi hai solo scritto :
int **m = (int **)malloc(x*sizeof(int *);
allora puoi deallocare scrivendo:
free(m);