配列を動的に作りたいときには、どうしても配列とポインタを読み替えていかないとならないだろ。

int tate = 10;
int yoko = 20;
int a[][] = malloc(sizeof(int) * tate * yoko);

これ、出来ないし。