Cómo eliminar una matriz bidimensional en C ++

Cómo eliminar una matriz bidimensional en C ++
Se puede crear una matriz 2D de dos maneras: usar la memoria normal o usar el almacén gratuito. Cuando se ejecuta un programa, tiene su parte normal de memoria y memoria adicional para usar. El programa no está obligado a usar la memoria adicional llamada tienda gratuita. El programa crearía una matriz 2D ordinaria en la memoria normal. Si el programa crea la misma matriz 2D en la tienda gratuita, entonces tendría que hacerlo dinámicamente. Las sintaxis para crear la matriz bidimensional en cualquier tipo de memoria, son diferentes. Para que elimine una matriz 2D ordinaria, solo déjelo salir del alcance. Para eliminar una matriz 2D, creada en la tienda gratuita, use el operador Eliminar [] adecuadamente.

Creación de una matriz 2D ordinaria

La siguiente declaración crea una matriz 2D ordinaria:

cadena arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"BA", "BB", "BC", "BD", "BE",
"Ca", "cb", "cc", "cd", "ce",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Si esta matriz se crea en el alcance global, no se puede usar (e.gramo. reasignó un valor de elemento) en el alcance global. Sin embargo, puede tener cualquiera de sus elementos reasignado un valor en los otros ámbitos.

Para que elimine esta matriz, solo déjelo salir del alcance. Si se creara en un alcance que no sea el alcance global, saldría del alcance al final de su bloque (). Si se creó en el alcance global, solo saldría del alcance al final del programa.

Matriz 2D de tienda gratis

La siguiente declaración muestra cómo la matriz anterior pero con un nombre de puntero diferente se puede crear dinámicamente en la tienda gratuita:

String (*ptr2d) [5] = nueva cadena [5] [5] "aa", "ab", "ac", "ad", "ae",
"BA", "BB", "BC", "BD", "BE",
"Ca", "cb", "cc", "cd", "ce",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Tenga en cuenta cómo se ha creado la matriz 2D con el nuevo operador. El nombre de la matriz, es ptr2d.

Si esta matriz se crea en el alcance global, no se puede usar (e.gramo. reasignó un valor de elemento) en el alcance global. Sin embargo, puede tener cualquiera de sus elementos, reasignado un valor en los otros ámbitos.

Para eliminar esta matriz, use el operador eliminar [], como se muestra a continuación. La matriz en la tienda libre no se puede eliminar realmente dejándolo salir del alcance. Debe eliminarse con el operador Eliminar [], en su alcance, para liberar la memoria.

Contenido del artículo

- Introducción - Ver arriba

- Eliminar una matriz ordinaria 2D

- Eliminar la matriz de puntero 2D creada dinámicamente de la tienda gratuita

- Conclusión

Eliminar una matriz ordinaria 2D

Una matriz ordinaria bidimensional se elimina simplemente dejando que salga del alcance. El siguiente programa ilustra esto con un alcance anidado:

#incluir
usando el espacio de nombres STD;
int main ()

if (1 == 1)
cadena arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"BA", "BB", "BC", "BD", "BE",
"Ca", "cb", "cc", "cd", "ce",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <regresar 0;

La salida es, BB. La construcción if tiene un bloque que es el alcance anidado. La matriz se detiene al final del bloque. Hay un indicador de comentarios, justo debajo del bloque, en el programa. Si se elimina, el programa no se compilará y se emitirá un mensaje de error. Esto resulta del hecho de que la matriz 2D está muerta al final del bloque.

En el siguiente programa, la matriz 2D ordinaria declarada en el cuerpo de funciones, muere al final del bloque de funciones:

#incluir
usando el espacio de nombres STD;
vacío fn ()
cadena arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"BA", "BB", "BC", "BD", "BE",
"Ca", "cb", "cc", "cd", "ce",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <int main ()

fn ();
regresar 0;

La salida está quieta, BB. Hay un indicador de comentarios justo debajo del bloque de funciones en el programa. Si se elimina, el programa no se compilará y se emitirá un mensaje de error. Esto resulta del hecho de que la matriz 2D está muerta al final del bloque. También recuerde que, la asignación de un valor a un elemento 2D, después de la declaración, no está permitida en el alcance global.

Eliminar la matriz de puntero 2D creada dinámicamente de la tienda gratuita

La asignación después de la declaración no está permitida en el alcance global. Por lo tanto, es conveniente tener una declaración de matriz 2D, en un alcance anidado, en la función principal de C ++, por razones pedagógicas.

Una matriz bidimensional, declarada en la forma anterior, se elimina con la sintaxis, "Eliminar [] 2Darray". Esta eliminación debe tener lugar en su alcance para liberar la memoria y evitar la fuga de memoria. El siguiente programa ilustra esto, con un alcance anidado:

#incluir
usando el espacio de nombres STD;
int main ()

if (1 == 1)
String (*ptr2d) [5] = nueva cadena [5] [5] "aa", "ab", "ac", "ad", "ae",
"BA", "BB", "BC", "BD", "BE",
"Ca", "cb", "cc", "cd", "ce",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< ptr2D[0][0] <eliminar [] ptr2d;
cout<< ptr2D[0][0] <
regresar 0;

La salida es, aa, de ptr2d [0] [0]. Después de la eliminación, ptr2d [0] [0] no devuelve nada. Aunque los otros elementos como Ptr2d [1] [1] aún devolverían un valor, la matriz se considera eliminada.

Matriz de tienda gratuita 2D como puntero-to-pointer

Se puede crear una matriz 2D como un puntero a punto. En este caso, todas las filas deberán eliminarse primero antes de que se elimine la matriz unidimensional restante. El siguiente programa ilustra esto en la función principal de C ++:

#incluir
usando el espacio de nombres STD;
int main ()

cadena ** ptr2d = nueva cadena*[3]; // no de filas
ptr2d [0] = nueva cadena [5];
ptr2d [0] [0] = "aa"; ptr2d [0] [1] = "AB"; ptr2d [0] [2] = "ac"; ptr2d [0] [3] = "ad";
ptr2d [1] = nueva cadena [5];
ptr2d [1] [0] = "ba"; ptr2d [1] [1] = "bb"; ptr2d [1] [2] = "bc"; ptr2d [1] [3] = "bd";
ptr2d [2] = nueva cadena [5];
ptr2d [2] [0] = "CA"; ptr2d [2] [1] = "CB"; ptr2d [2] [2] = "cc"; ptr2d [2] [3] = "CD";
cout<< ptr2D[1][1] <// Libre cada subarray (fila)
para (int i = 0; i< 3; ++i)
eliminar [] ptr2d [i];

eliminar [] ptr2d; // libera la matriz de punteros
cout<< ptr2D[1][1] <regresar 0;

La salida es BB antes de eliminar. Después de eliminar, el valor de retorno de ptr2d [1] [1] no es nada.

Ahora, esta matriz 2D de puntero en la tienda gratuita es una matriz unidimensional de puntero, de matrices de puntero. Entonces, para eliminar la matriz 2D en la tienda gratuita, todas las filas deben eliminarse primero con Delete [] antes de que se elimine la matriz de puntero unidimensional principal. Esto utiliza el esquema del operador Eliminar [] para una matriz 2D en la tienda gratuita.

Inclusión de la biblioteca

El operador nuevo y deletero, en realidad se definen en la biblioteca. Sin embargo, incluida esta biblioteca es opcional.

Conclusión

Para eliminar una matriz ordinaria 2D, solo déjala salir del alcance. Si la matriz 2D está en la tienda gratuita, entonces debe eliminarse con el operador Eliminar [] para la memoria libre en el alcance en el que se declara. Si la matriz 2D en la tienda gratuita se creó con una sintaxis convencional, entonces un simple "Eliminar [] 2DarrayName" sería para eliminar. Si se creó como un puntero a punto, entonces las filas deberán eliminarse primero con "Eliminar [] 2DarrayName [i]" y luego la matriz 1D restante (sin elementos), se elimine con "Delete [] 2DarrayName ".