Sin entrar en si
i está inicializada o no, la expresión:
Únicamente puede modificar un int, ¿por qué? porque p es un puntero doble a tipo int... luego si eliminas las dos indirecciones que tiene (una se elimina con el asterisco y la otra con los corchetes) te encuentras con que estás accediendo única y exclusivamente a un entero, que es lo único que podrás modificar en ese paso.
Ahora, si resulta que tenemos en cuenta el valor de
i, al no estar inicalizada, puede tener cualquier valor dentro del rango de un int, que es prácticamente (-2^31..2^31). En este caso, con la expresión anterior también estarás accediendo única y exclusivamente a un int por vez, lo que sucede es que ese int puede estar en cualquier parte de la memoria y, muy seguramente, esa memoria no pertenezca a la matriz que pretendes inicializar.
Por cierto, si te fijas verás que la inmensa mayoría de los libros de programación tienen un número de revisión. Esto es porque se descubren errores una vez publicado el libro y la única forma de corregirlos es aplicarlos en la siguiente revisión.