codice:
p = (int*)calloc(k,sizeof(int));
Stai allocando un array di int di dimensione k. k, dal momento che non e` inizializzato, ha un valore casuale...

codice:
p[k++]=mat[i][j];
Anche qui k non ha un valore definito.

codice:
int conta(unsigned int **mat,int nrighe, int ncolonne){
La funzione dovrebbe ritornare un int*, non un int.