elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  MEMORIA SIN LIBERAR C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: MEMORIA SIN LIBERAR C++  (Leído 3,389 veces)
guero

Desconectado Desconectado

Mensajes: 3


Ver Perfil
MEMORIA SIN LIBERAR C++
« en: 6 Julio 2020, 05:31 am »

Hola, tengo una consulta. Hay alguna manera para mostrar por pantalla al usuario que NO quedó memoria sin liberar? Existe una exception de este tipo? Estuve buscando en internet y no encontré nada de eso.


Gracias!


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: MEMORIA SIN LIBERAR C++
« Respuesta #1 en: 6 Julio 2020, 05:44 am »

Existen opciones como valgrind (para Linux) que te permiten ejecutar un programa y al finalizar te muestra información entre la que se encuentra la cantidad de memoria sin liberar o los errores que se hayan producido durante la ejecución.
Con esto puedes probar tu programa y ver que no queda memoria sin liberar antes de su finalización.

Pero obviamente estas herramientas no están destinadas a ser usadas por el usuario final sino por el desarrollador. Debes ser tú quien pruebe tus programas con alguna herramienta del estilo para ver que no queda memoria sin liberar.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
guero

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: MEMORIA SIN LIBERAR C++
« Respuesta #2 en: 6 Julio 2020, 05:50 am »

Gracias por responder!
Claro, conozco Valgrind pero mi idea era (para un trabajo de la escuela) poder mostrarle con un throw que confirme que se liberó toda la memoria.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: MEMORIA SIN LIBERAR C++
« Respuesta #3 en: 6 Julio 2020, 16:47 pm »

¿Cómo puedes saber que no se liberó memoria y cuando se se liberó?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: MEMORIA SIN LIBERAR C++
« Respuesta #4 en: 6 Julio 2020, 21:04 pm »

Gracias por responder!
Claro, conozco Valgrind pero mi idea era (para un trabajo de la escuela) poder mostrarle con un throw que confirme que se liberó toda la memoria.
Desconozco si existe alguna manera de mostrar eso tal y como quieres pero la verdad me extraña que exista. Al final al que le importa que se libere la memoria no es al usuario sino al desarrollador y éste último tiene a su alcance herramientas externas para comprobar que la memoria está liberada ante cualquier finalización del programa.

¿Cómo puedes saber que no se liberó memoria y cuando se se liberó?
Cuando se habla de liberar memoria se hace referencia a la que se reserva de manera dinámica usando funciones como: malloc()/realloc()/calloc() (en C) o new() (en C++). Esta memoria tiene que ser liberada de forma manual con: free() (en C) o delete() (en C++).
Por ejemplo puedes usar herramientas como valgrind (en Linux) y ejecutar:
Código:
$ gcc free_memory.c -o free_memory
$ valgrind ./free_memory
Y se ejecutará tu programa de manera normal para después indicarte si ha quedado memoria no liberada:
Código:
==11393== Command: ./free_memory 
==11393== HEAP SUMMARY:
==11393==     in use at exit: 10 bytes in 1 blocks
==11393==   total heap usage: 3 allocs, 2 frees, 2,058 bytes allocated
==11393==
==11393== LEAK SUMMARY:
==11393==    definitely lost: 10 bytes in 1 blocks
==11393==    indirectly lost: 0 bytes in 0 blocks
==11393==      possibly lost: 0 bytes in 0 blocks
==11393==    still reachable: 0 bytes in 0 blocks
==11393==         suppressed: 0 bytes in 0 blocks
==11393== Rerun with --leak-check=full to see details of leaked memory
==11393==
==11393== For counts of detected and suppressed errors, rerun with: -v
==11393== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Como te indica ahí, puedes usar otros parámetros para la ejecución de valgrind para obtener más información.

La salida del mismo programa liberando la memoria dinámica con free():
Código:
==11457== HEAP SUMMARY:
==11457==     in use at exit: 0 bytes in 0 blocks
==11457==   total heap usage: 3 allocs, 3 frees, 2,058 bytes allocated
==11457==
==11457== All heap blocks were freed -- no leaks are possible
==11457==
==11457== For counts of detected and suppressed errors, rerun with: -v
==11457== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: MEMORIA SIN LIBERAR C++
« Respuesta #5 en: 7 Julio 2020, 07:22 am »

Una forma muy usada, en particular por MFC de Microsoft es el Debug_new donde se usan macros para detectar memory leaks, del tipo

#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW

El artículo original, con todas las explicaciones, y el link de descarga de debug_new.h que implementa esta técnica está en

http://wyw.dcweb.cn/leakage.htm
En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: MEMORIA SIN LIBERAR C++
« Respuesta #6 en: 7 Julio 2020, 14:41 pm »

Gracias por la explicación muy desarrollada.  ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
liberar memoria ram?
Windows
nova.to 1 3,805 Último mensaje 20 Abril 2011, 16:40 pm
por el-brujo
Cómo liberar memoria RAM
Noticias
wolfbcn 1 2,243 Último mensaje 28 Octubre 2011, 18:37 pm
por [u]nsigned
Liberar memoria
Programación C/C++
Upeksa 3 2,532 Último mensaje 17 Septiembre 2013, 19:23 pm
por Upeksa
liberar memoria(Resuelto)
Programación C/C++
Beginner Web 1 1,659 Último mensaje 6 Diciembre 2018, 19:18 pm
por CalgaryCorpus
Duda al liberar memoria
Programación C/C++
sallaks 5 3,606 Último mensaje 12 Julio 2020, 11:44 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines