1)Cosa fa il debug mode che il "normal mode" non fa?
Un sacco di cose. Può porre variabili locali e puntatori in stati noti, può addottare un codice malloc e free diverso da quello release.
2)Cosa significa exit -1?
Appena incontrata quella istruzione, il programma termina brutalmente e il valore di uscita è -1 appunto.

3)Voi come avreste fatto avendo un puntatore ad all'inizio di un area di memoria (che sapete contigua) a usarlo con la notazione matriciale (mat[i][j] per intenderci)?
mat[MAX_COL * i + j];