To nie wygląda zbyt sensownie. (przy okazji popraw sobie formatowanie, bo tak to nie jest zbyt czytelne)
Po pierwsze, masz ostrzeżenia od kompilatora:
main.c: In function ‘main’:
main.c:19:23: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
*(*(p + i) + j) = (int **)malloc(n * sizeof(int *));
I faktycznie, już pierwszych kilka linii jest dziwnych:
Najpierw na linii 18 alokujesz tablicę wskaźników na int, ok.
Potem na linii 22 do każdego elementu tablicy przypisujesz wskaźnik na nową tablicę N intów, OK.
A potem na linii 26 do każdego elementu tablicy intów przypisujesz... wskaźnik na nową tablicę N wskaźników na int?
Nie wiem co ta linia 26 ma robić. To koniec końców ma być łącznie tablica dwuwymiarowa, trójwymiarowa, czterowymiarowa...?
Z późniejszego kodu wnioskuję że miała być dwuwymiarowa, ale jeśli tak, to zrobiłeś o jedną za dużo warstwę malloc/free.
(plus jeszcze na samym końcu masz pętlę która robi się 10 razy, mimo że wszystkie inne zależą od N)