Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: capsulasinformaticas en 21 Marzo 2013, 16:01 pm



Título: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: capsulasinformaticas en 21 Marzo 2013, 16:01 pm
Estaba investigando como hacer matrices dinamicas y en una parte lei que podia hacerlo con new, entonces yo lo implemente de esta forma.

Código
  1.    void crearMatriz(int **m) {
  2.            for (i=0; i<n; i++)
  3.            m[i] = new int[n];
  4.     }
  5.  
  6.    int main() {
  7.        int **matriz1;
  8.  
  9.        matriz1 = new int *[n];
  10.  
  11.            crearMatriz(matriz1);

Lo que al parecer me funciona correctamente, el problema es que no se como hacer el delete correspondiente (lei que era una buena practica de programacion hacer el delete aunque la mayoria de los S.O. actuales liberan la memoria al cerrar el programa), ¿alguien me ayuda?.


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: amchacon en 21 Marzo 2013, 16:27 pm
No solo es una buena práctica de programación, sino que debes hacerlo en programas más grandes cuando ya no necesites esa matriz (o malgastaras memoria).

Si para reservar la matriz tienes que hacer esto:

Código
  1. int** Matriz = new int*[n];
  2.  
  3. for (int i = 0; i < n;i++)
  4.    Matriz[i] = new int[n];

Para borrarla tendrás que hacerlo al reves:

Código
  1. for (int i = 0; i < n;i++)
  2.      delete[] Matriz[i];
  3.  
  4. delete[] Matriz;
  5.  


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: Puntoinfinito en 21 Marzo 2013, 16:31 pm
Así es como se utiliza;

Código
  1. #include <iostream>     // std::cout
  2.  
  3. struct MyClass {
  4.  MyClass() {std::cout <<"MyClass constructed\n";} //La utilizamos
  5.  ~MyClass() {std::cout <<"MyClass destroyed\n";}
  6. };
  7.  
  8. int main () {
  9.  MyClass * pt;
  10.  
  11.  pt = new MyClass[3]; //Creamos variable dinámica
  12.  delete[] pt; //Eliminamos
  13.  
  14.  return 0;
  15. }

Saludos


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: amchacon en 21 Marzo 2013, 16:47 pm
Él habla de matrices no de vectores...


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: Puntoinfinito en 21 Marzo 2013, 16:58 pm
Es lo mismo... lo que busca es el funcionamiento de delete

Lo que al parecer me funciona correctamente, el problema es que no se como hacer el delete correspondiente (lei que era una buena practica de programacion hacer el delete aunque la mayoria de los S.O. actuales liberan la memoria al cerrar el programa), ¿alguien me ayuda?.

Mientras el ejemplo solucione su problema...


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: capsulasinformaticas en 21 Marzo 2013, 17:52 pm
No solo es una buena práctica de programación, sino que debes hacerlo en programas más grandes cuando ya no necesites esa matriz (o malgastaras memoria).

Si para reservar la matriz tienes que hacer esto:

Código
  1. int** Matriz = new int*[n];
  2.  
  3. for (int i = 0; i < n;i++)
  4.    Matriz[i] = new int[n];

Para borrarla tendrás que hacerlo al reves:

Código
  1. for (int i = 0; i < n;i++)
  2.      delete[] Matriz[i];
  3.  
  4. delete[] Matriz;
  5.  

¿Y eso me sirve aun que haya hecho aparte de lo anterior, esto:

Código
  1. for (i=0; i<n; i++)
  2. matriz1[i] = new int[n];

Que no solo seria un vector dinamico, si no que una matriz dinamica?.


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: amchacon en 21 Marzo 2013, 17:56 pm
Claro, si te fijas es lo mismo que has hecho antes pero al reves (y en vez de new poniendo delete claro).

La mejor forma de confirmarlo es intentar acceder a la posición (0,0), si la aplicación se cierra inesperadamente = Has tocado memoria que no deberías tocar = No tienes memoria reservada.


Título: Re: [C++] Duda con new y delete[] o delete Tratando de hacer matriz dinamica
Publicado por: capsulasinformaticas en 21 Marzo 2013, 18:03 pm
Claro, si te fijas es lo mismo que has hecho antes pero al reves (y en vez de new poniendo delete claro).

La mejor forma de confirmarlo es intentar acceder a la posición (0,0), si la aplicación se cierra inesperadamente = Has tocado memoria que no deberías tocar = No tienes memoria reservada.

Gracias compadre, despues de publicar el mensaje lei bien y me di cuenta de que si estaba bien pero ya me habias respondido, gracias.

EDIT: No se me cerro, pero me dio que despues de liberar la memoria la posicion 0.0 era igual a 0, despues la posicion 1.0 era como 39232131, supongo que esta bien...