int (*p)[4] = new int[3][4];
は
int *p = new int[3][4];

じゃだめなんですか?[4]をつける意味無くないですか?