¿Cómo asigna C espacio para una matriz 2D (3D…) cuando se utiliza malloc?

Tengo un problema para entender cómo C asigna espacio para una matriz 2D (o más dimensional), especialmente cuando usamosmalloc y similares. Tomar el programa enesta pregunta por ejemplo.

Primero se define una matriz unidimensional de punteros, luego los punteros a las matrices de datos 1D (en este caso, cadenas) se colocan en cada uno de los cuadros de la primera matriz 1D. Por lo tanto, no hay garantía de que toda la matriz 2D sea contigua (a la última celda de la fila anterior le sigue la primera celda de la fila siguiente). Cada conjunto de datos 1D puede ser muy distante, solo sus punteros son contiguos. ¿Estoy en lo correcto o me falta algo? Realmente agradecería que me ayudaran a aclarar esto.

Respuestas a la pregunta(3)

Su respuesta a la pregunta