• Se allochi per righe e colonne, allora devi inizializzare/accedere per righe e colonne.
  • Se vuoi inizializzare/accedere in modo linearizzato, allora devi allocare in modo linearizzato.

Il tuo programma crasha perché allochi per righe e colonne e poi pretendi d'inizializzare/accedere in modo linearizzato:

L'ultimo elemento valido è "mat [nrow -1]" e contiene un puntatore a double.. se vai oltre (e tu vai a mat [nrow*ncol -1]) il comportamento è giustamente indefinito. Che poi ti crashi solo all'ultimo elemento, e non prima, non importa: sempre comportamento indefinito è.