Io naturalomente ho usato uno strumento di debug,e so dove mi da errore. La cosa strana è che l'errore è all'interno della malloc().
L'unica soluzione all'enigma per ora è che ci sia un bug nella malloc(), ma è assurdo!
Oggi ho persino controllato che non venisse allocata memoria in indirizzi già riservati. Poi mi sono messo a studiare un po' come funziona la malloc(). Gestisce i blocchi di memoria con una lista doppiamente lincata e ad un certo punto si dimentica di istanziarne uno e quando ci va a scrivere genera un'eccezzione.

Ad ogni modo se new e delete sono costrutti del c++ posso provare con quelli.

Riguardo al tuo codice. Prima pensavo che fosse un'idea elegante, ma poi mi sono reso conto che forse c'è un errore.

Di certo funziona, però allochi molta più memoria di quella che serve.
Probabilmente ti sarai sbagliato.

Il codice corretto è il seguente:

double **matrix;

matrix = (double**)malloc(10 * sizeof(double*));

for (int i = 0; i < 10; i++)
matrix[i] = (double)malloc(15 * sizeof(double));

Comunque grazie. Ciao, Danilo