>>685
>  p = (double**)malloc(sizeof(double*) * n + sizeof(double) * n * m);
>  t = (double*)&p[n];

これ、環境によっては動かないよ。