reservar - matriz dinamica c++
GestiĆ³n de memoria en la asignaciĆ³n de matriz 2-D (2)
" ¿Cuál es la forma correcta de hacerlo? "
Usar contenedores estándar como, por ejemplo, std::vector<std::vector<int>>
o std::array<std::array<int,N>,N>
(se supone que N
ya se conoce en tiempo de compilación) es la forma correcta .
No usa new()
/ new[]
y delete
/ delete[]
en el 1er lugar (además de los raros casos de uso válidos).
Si está seguro de que tiene dicho caso, elimínelo exactamente en el orden inverso al que estaba asignando usando new[]
. delete [][];
no es una sintaxis válida, como el compilador ya te dijo.
He asignado una matriz bidimensional utilizando el siguiente código:
// Dynamic allocation
int **matrix=new int*[n];
for(int i=0;i<n;i++)
{
matrix[i]=new int[n];
}
Esto funciona bien
- En primer lugar, asignamos una matriz de punteros enteros.
- A continuación, asignamos cada uno de los punteros anteriores para apuntar a una ubicación de memoria de
n
enteros. Esto crea nuestra matriz bidimensional.
Sé que un destructor para una matriz dinámicamente asignada debería verse así:
~SquareMatrix()
{
delete [] OneDarray;
}
El énfasis está en []
porque si no está escrito, solo se eliminará el primer elemento de la matriz.
Por motivos similares, creo que necesito colocar el []
dos veces para eliminar todo el conjunto bidimensional, como
delete [] [] matrix;
Pero esto no funciona y da un error de tiempo de compilación.
¿Cuál es la forma correcta de hacerlo?
for(int i=0;i<n;i++)
{
delete [] matrix[i];
}
delete [] matrix
Debe eliminar cada una de las matrices internas y luego eliminar la matriz.
Como se ha sugerido en un comentario. Una forma más segura de hacer esto sería usar contenedores estándar como std::vector
. Podrías hacer algo como esto entonces:
std::vector<std::vector<int>> matrix;
Esto le daría una matriz bidimensional pero no tendría que manejar la limpieza.