double **a;
....
if ((a == (double *)(malloc(sizeof(double *) * m))) == NULL) {
エラーの場合の処理
}
のようにポインターへのポインターを宣言して、必要な領域を確保した後で、
行列の各行の先頭のアドレスを
for (i = 0; i < m; i++)
a[i] = abody + i * n;
とセットする。ここまでは大変だが、