[C con Clase] [C con clase] ¿exit() libera memoria dinámica?

David fire ddfire en gmail.com
Vie Jul 31 15:31:09 CEST 2009


hola
el sistema operativo automaticamente loibera toda la memoria que use un
proceso.
excepto la memoria compartida.
busca valgrind.org no se si esta para windows pero de ultima pones valgrind
windows y algo va a aparecer.

David

El 31 de julio de 2009 09:32, David Inocente Romero Escalona <
di.romero en hotmail.es> escribió:

>  Una última duda sobre el tema de la reserva dinámica de memoria.
>
> ¿y si el programa termina anormalmente (por ejemplo, porque se aborta
> llamando a la función "abort()" ó porque recibe una señal de aborto y no la
> maneja)? ¿se sigue ejecutando el código objeto que añade el compilador de
> C++ para destruir todos los objetos que se hayan creado y sigan vivos?
>
> Por cierto, ¿conoces algún programa/herramienta para win32 que permita
> saber si un cierto proceso tiene "fugas de memoria" (memory leaks)?
>
> Saludos.
>
>
> > Date: Thu, 30 Jul 2009 16:46:40 -0400
> > From: srd4121 en njit.edu
> > To: cconclase en listas.conclase.net
> > Subject: Re: [C con Clase] [C con clase] ¿exit() libera memoria dinámica?
> >
> > Hola David,
> >
> > David Inocente Romero Escalona wrote:
> > > En primer lugar, muchas gracias por tu completa respuesta, Steven.
> > > Creo que ya sé por qué he vuelto a esta lista de correo...
> > >
> >
> > De nada; para eso estamos :)
> >
> > > En mi aplicación, las reservas de memoria de forma dinámica se
> > > realizan en una sola clase C++ (que modeliza una lista de números
> > > reales dinámica, es decir, que puede crecer en tiempo de ejecución).
> > > Esta clase define adecuadamente su método destructor para que libere
> > > toda la memoria que haya podido reservar dinámicamente. Igualmente,
> > > todos los métodos de la clase tienen especial cuidado en no dejar
> > > zonas de memoria reservadas dinámicamente sin liberar.
> > >
> > > En ningún otro punto de la aplicación se realiza reserva dinámica de
> > > memoria alguna. Todos mis objetos 3D (que son objetos de clases C++)
> > > que necesitan usar una lista dinámica de números reales tienen un
> > > objeto miembro de la clase mencionada que maneja la memoria dinámica.
> > >
> > > Además, todos los objetos que creo los creo usando memoria estática
> > > (es decir, sin reservar memoria en tiempo de ejecución); de esta
> > > forma:
> > >
> > > Objeto3D objeto3D(<parámetros necesarios>);
> > >
> > > Por lo tanto, según lo último que comentas, no debo destruir objeto
> > > alguno (aunque ese objeto contenga un objeto que a su vez ha
> > > reservado memoria dinámicamente). Al terminar el proceso, se
> > > destruirán todos los objetos creados (por lo que se llamará a sus
> > > destructores y, éstos, acabarán liberando la memoria reservada en
> > > tiempo de ejecución).
> > >
> > > ¿estoy en lo correcto?
> > >
> >
> > Perfecto. Si los destructores gestionan la liberación de la memoria
> > dinámica, entonces el "exterior" no tiene que preocuparse. Al fin y al
> > cabo, se trata de una gestión interna del objeto, el cual debe hacer
> > autónomamente.
> >
> > > Por cierto, ¿quién envía el mensaje destructor a todos los objetos
> > > que se hayan creado al terminar el proceso? ¿el compilador de C++
> > > introduce código objeto que se encarga de realizarlo?
> > >
> >
> > Sí. El compilador es quien se encarga, ya que este sistema está
> > establecido por el lenguaje, C++.
> >
> >
> > Para zanjar este tema, se me olvidó comentar que existe la
> > clase-plantilla 'auto_ptr' que podría servir para lo que mencionas. Esta
> > plantilla representa el concepto de un "puntero inteligente".
> > Básicamente, se comporta como un puntero, pero generará una clase la
> > cual destruirá la memoria dicho puntero apunta, valga la redundancia.
> > Por ejemplo,
> >
> > int main()
> > {
> > auto_ptr< Info > pLista( new Info );
> > ...
> > return 0;
> > }
> >
> > La clase 'auto_ptr<Info>' se encargará de destruir la memoria creada
> > dinámicamente al terminar el ámbito.
> >
> > Sé que no necesitas esto, pero quería completa lo que dije en mi
> > anterior mensaje.
> >
> >
> > Espero haber aclarado las dudas.
> >
> > Steven
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
> ------------------------------
> Comparte tus fotos con tus amigos. Más fácil con Windows Live<http://download.live.com>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090731/5587cc16/attachment.html>


Más información sobre la lista de distribución Cconclase