non sono stato molto a guardare quello che il codice combina, perché l'errore è evidente: hai un indice pari a -1 in quel ciclo for... e la cosa è banale: tu parti dalla condizione r = 4, righe = 5 e il confronto lo fai su r < righe... problema: quella è vera, ed è sempre vera in quanto r diminuisce ad ogni giro (r--). Ad un certo momento, con r = 0, cerchi di andare a recuperare un'ipotetica riga "-1". Dovresti rivedere un attimo il funzionamento, magari mettendo un lower bound nel ciclo for, per esempio:
o simile. vedi tu.codice:for (r = righe -1; r > 0; r--) {