Desasignar una matriz 2D en C++

Saad Aslam 12 octubre 2023
  1. Inicialización de un arreglo 2D en C++
  2. Utilice el operador eliminar para desasignar una matriz 2D en C++
  3. Utilice los operadores malloc() y free() para desasignar una matriz 2D en C++
Desasignar una matriz 2D en C++

Este artículo explicará cómo inicializar y desasignar una matriz bidimensional en el lenguaje de programación C++.

La versión más básica de una matriz multidimensional que se puede crear en C++ es una matriz bidimensional; matriz es otro nombre para una matriz bidimensional. Dependiendo de cómo se inicialice, puede ser de cualquier tipo, incluidos números enteros, caracteres, flotantes, etc.

El operador nuevo en C++ permite la asignación dinámica de una matriz bidimensional, mientras que el operador eliminar permite la desasignación posterior de la matriz una vez que se ha utilizado. Hay algunos enfoques diferentes disponibles cuando se asignan matrices bidimensionales con la ayuda del operador nuevo.

Cuando la memoria dinámica se asigna mediante un almacenamiento gratuito, puede obtener una referencia al objeto que se ha creado; sin embargo, este puntero se refiere al primer byte del área que se ha asignado.

Inicialización de un arreglo 2D en C++

Primero creamos una matriz de matrices usando una matriz bidimensional llamada arr con cinco filas y dos columnas.

int arr[5][2] = {
    {11, 12}, {13, 14}, {10, 12}, {14, 16}, {15, 17},
}

El siguiente es otro método que podemos usar para establecer una matriz bidimensional con cinco filas y dos columnas.

int arr[5][2] = {11, 12}

Hemos terminado el proceso de inicialización de una matriz bidimensional. Aún así, como aún no lo hemos impreso, no podemos comprobar si la operación se ha realizado correctamente o no.

#include <iostream>
using namespace std;

int main() {
  int arr[5][2] = {
      {11, 12}, {13, 14}, {10, 12}, {14, 16}, {15, 17},
  };
  int i, j;
  cout << "The array is shown as follows:\n" << endl;
  for (i = 0; i < 5; i++) {
    for (j = 0; j < 2; j++) {
      cout << arr[i][j] << "\t";
    }
    cout << endl;
  }
}

Producción :

The array is shown as follows:

11      12
13      14
10      12
14      16
15      17

Utilice el operador eliminar para desasignar una matriz 2D en C++

La desasignación de la matriz es la característica más importante de C++.

Se requiere la intervención del programador para liberar la RAM que se asignó dinámicamente. La desasignación o liberación del espacio de memoria ocupado por una variable de datos, un puntero o una matriz se logra con el operador eliminar.

En el siguiente ejemplo, intentaremos desasignar memoria para la matriz, y solo establece el primer entero de la matriz en 0 y deja el resto como está.

Declare dos variables con el tipo de datos int llamadas i y n dentro del método main() de su programa.

int i, n;

Ahora es el momento de recopilar información sobre el número total de enteros que queremos almacenar.

cout << "How many integers do you want to store?" << endl;
cin >> n;

Inicializaremos un array de tipo int llamado pointerArray mediante un puntero.

int* pointerArray = new int[n];

Deje que el usuario proporcione alguna entrada para que podamos llenar la matriz con algunos números. Usamos un bucle for que itera y acepta entradas hasta que toma valores iguales al número de enteros que deseamos almacenar en el sistema.

for (int i = 0; i < n; i++) {
  cout << endl;
  cout << "Please input an integer\n";
  cin >> pointerArray[i];
}

Imprimiremos los enteros que ahora se encuentran en la matriz. Para ello, hacemos uso del bucle for.

cout << "Stored array values\n";

for (int i = 0; i < n; i++) {
  cout << pointerArray[i] << endl;
}

Para desasignar la matriz, primero debe usar el operador remove[]. Una vez más, imprimimos la matriz para confirmar que se ha desasignado efectivamente.

cout << "Deallocating array\n";
delete[] pointerArray;

cout << "Print the array to check if the array is deallocated\n";
for (i = 0; i < n; i++) {
  cout << pointerArray[i] << endl;
}

Código fuente completo:

#include <iostream>
using namespace std;

int main() {
  int i, n;

  cout << "How many integers do you want to store?" << endl;
  cin >> n;

  int* pointerArray = new int[n];

  for (int i = 0; i < n; i++) {
    cout << endl;
    cout << "Please input an integer\n";
    cin >> pointerArray[i];
  }

  cout << "Stored array values\n";

  for (int i = 0; i < n; i++) {
    cout << pointerArray[i] << endl;
  }
  cout << "Deallocating array\n";
  delete[] pointerArray;

  cout << "Print the array to check if the array is deallocated\n";
  for (i = 0; i < n; i++) {
    cout << pointerArray[i] << endl;
  }
}

Producción :

How many integers do you want to store?
2

Please input an integer
2

Please input an integer
3
Stored array values
2
3
Deallocating array
Print the array to check if the array is deallocated
0
0

Utilice los operadores malloc() y free() para desasignar una matriz 2D en C++

En este caso, usamos la función malloc() para asignar memoria int con un tamaño de 0 al puntero newPointer.

int* newPointer = (int*)malloc(0);

Después de eso, usamos una declaración if para determinar si malloc() proporcionó una dirección o un puntero nulo. Si produjo una dirección, pasamos al siguiente paso.

if (newPointer == NULL) {
  cout << "Null value";
} else {
  cout << "Address = " << newPointer;
}

Finalmente, liberamos la memoria utilizando el método de desasignación free().

free(newPointer);

Código fuente completo:

#include <cstdlib>
#include <iostream>
using namespace std;

int main() {
  int *newPointer = (int *)malloc(0);

  if (newPointer == NULL) {
    cout << "Null value";
  } else {
    cout << "Address = " << newPointer;
  }

  free(newPointer);
  return 0;
}

Producción :

Address = 0x56063cf64eb0
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Artículo relacionado - C++ Array