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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


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

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Liberar memoria
« en: 17 Septiembre 2013, 18:15 pm »

Hola a todos:

He programado un código en C en un software de simulación de fluidos. En este código, hago unos 12 malloc con sus free correspondientes.
Mi código se ejecutará del orden de cientos de veces.
El problema es que, llegada una cierta cantidad de iteraciones, el programa me da un error de "out of memory". Haciendo un seguimiento en el uso de memoria RAM, efectivamente, me voy quedando paulatinamente sin memoria.
El programa no me da otro tipo de errores ni compilar ni en otro momento.
He comprobado muchas veces y no parece que tenga algún malloc sin free o mal asignado, pero podría ser que sí tuviese un problema de ese tipo pero no me esté dando cuenta.
Justo después de liberar mis matrices, pongo esa variable igual a NULL.
¿Alguna sugerencia?
Gracias por vuestra ayuda, un saludo


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Liberar memoria
« Respuesta #1 en: 17 Septiembre 2013, 18:27 pm »

Si es para Windows baja las Debugging Tools for Windows, ahi tenes el UMDH para empezar.

Es dificil de saber sin ver el codigo pero hablas de matrices, asegurate de liberar cada uno de los elementos de las mismas si son dinamicos.

Cada vez que llames a malloc y free loggealo (como prefieras, en un archivo o por consola printf("reservando %p\r\n", mem); por ejemplo).


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: Liberar memoria
« Respuesta #2 en: 17 Septiembre 2013, 19:03 pm »

¿Tu aplicación hace uso de recursos externos?, una base de datos, conexión a un servidor, etc.

Si dices que liberas toda la memoria reservada puede que el despordamiento se deba a que cargas información de otro lado y no lo estás controlando.
En línea

Upeksa

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Liberar memoria
« Respuesta #3 en: 17 Septiembre 2013, 19:23 pm »

¿Tu aplicación hace uso de recursos externos?, una base de datos, conexión a un servidor, etc.

Si dices que liberas toda la memoria reservada puede que el despordamiento se deba a que cargas información de otro lado y no lo estás controlando.

Efectivamente, estoy conectado a un servidor y estoy leyendo memorias propias del software que estoy utilizando (que había creado previamente en otro código anterior, también con memorias dinámicas).

Perdonad que no publique mi código, pero básicamente consta de un preproceso que es un algoritmo de asignación de datos (cada celda en que se divide mi dominio debe buscar otra celda que cumpla una cierta condición). La información la guardo en una memoria propia del programa para después visualizarla. Este código no da problemas porque sólo se ejecuta una vez (pero libero memorias igualmente).

Después, el problema aparece en el postproceso que se repetirá cientos de veces: Me voy quedando sin memoria paulatinamente. Lo que hago es releer las memorias propias de mi programa, y crear matrices dinámicas en las que almaceno los datos de esta memoria, y finalmente, las libero(si no me he equivocado).

Para empezar, como se ha sugerido, voy a crear mensajes en mi código para asegurame que estoy liberando memoria correctamente (ya había creado mensajes que devuelven un error si el malloc ha fracasado).

Teniendo en cuenta que mi código se ejecutará muchas veces, ¿me recomendáis que sustituya mis malloc por calloc?

Gracias de nuevo, un saludo.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al liberar memoria con free()
Programación C/C++
mester 7 3,691 Último mensaje 21 Mayo 2016, 14:35 pm
por AlbertoBSD
C: liberar memoria: pointer being freed was not allocated
Programación C/C++
andie13 1 1,937 Último mensaje 2 Enero 2018, 01:21 am
por MAFUS
liberar memoria(Resuelto)
Programación C/C++
Beginner Web 1 1,644 Último mensaje 6 Diciembre 2018, 19:18 pm
por CalgaryCorpus
MEMORIA SIN LIBERAR C++
Programación C/C++
guero 6 3,372 Último mensaje 7 Julio 2020, 14:41 pm
por Meta
Duda al liberar memoria
Programación C/C++
sallaks 5 3,582 Ú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