Il problema è che cerchi di fare tutto in un' unica funzione e quindi risulta più difficile ricercare l' errore ( questo è un consiglio per il futuro ). Se vedi il mio vecchio post , io ho creato una funzione a parte che conta il num di occorrenze . Comunque gli errori che vedo a prima lettura sono :
la variabile booleana riemp a cosa serve?
nella funzione ePresente passi tanti parametri ( esempio r e c che li passi a fare? )
for(int p=0;p<r;p++){
for(int q=j+1;j<c;j++)
p non deve essere = 0 ma = i , perchè devi sempre iniziare dal valore successivo che devi calcolare, e siccome utilizzi un metodo che blocchi le righe e muovi le colonne allora inizia da p= i e q= j+1
if(!ePresente(m,r,c,i,j,v,rpm)){
for(int p=0;p<r;p++){
for(int q=j+1;j<c;j++){
if(m[i][j]==m[p][q]){
inserisci=true;
riemp=true;
occ++;
}
if(inserisci){
v[rpm].val=m[i][j];
v[rpm].occ=occ;
rpm++;
}
}
}
}
l' if (inserisci ) mettilo fuori dall' if ( !ePresente ).
Vedi un pò come va