Si bien todas estas respuestas son relevantes, voy a tratar de explicar lo que llegó a una expectativa, que algo como delete[][] array;
pueden trabajar en matrices asignados dinámicamente y por qué no es posible:
La sintaxis int array[ROWS][COLS];
admiten bajo estáticamente matrices asignadas es solo una abstracción para los programadores, que en realidad crea una matriz unidimensional int array[ROWS*COLS];
. Pero durante el proceso de compilación (cuando los tamaños de dimensión COLS
y ROWS
deben ser constantes por estándar), el compilador también recuerda el tamaño de esas dimensiones, que son necesarias para dirigir los elementos más adelante utilizando sintaxis, p. array[x][y] = 45
. El compilador, al ser conocido de este tamaño, reemplazará [x][y]
con el índice correspondiente a una matriz unidimensional usando matemática simple: [COLS*x + y]
.
Por otro lado, este no es el caso con dinámicamente matrices asignadas, si desea la misma funcionalidad multidimensional (de hecho, notación). Como su tamaño se puede determinar durante el tiempo de ejecución, también tendrían que recordar el tamaño de cada dimensión adicional para su uso posterior, y recordar eso durante toda la vida de la matriz. Además, los cambios del sistema tendrían que implementarse aquí para trabajar con matrices en realidad como multidimensionales, dejando la forma de anotación de acceso [x][y]
en el código, no reemplazándola con una notación unidimensional durante la compilación, sino más tarde reemplazándola en el tiempo de ejecución.
lo tanto, un ausencia dearray = new int[ROWS][COLS]
implica que no hay necesidad de delete[][] array;
. Y como ya se mencionó, no se puede utilizar en su ejemplo para eliminar su matriz "multidimensional", ya que sus sub-arrays (dimensiones adicionales) se asignan por separado (usando la llamada new
por separado), por lo que son independientes de la parte superior array (array_2D
) que los contiene y no se pueden eliminar todos a la vez.
No, provocará una pérdida de memoria si intenta eliminar [] una matriz dentada. –