Liberar memoria reservada
Hola.
He hecho un programa el cual sé que tiene un error de memoria, es decir:
- no he liberado memoria previamente reservada.
ó - he liberado una zona de memoria más de una vez.
ó - he liberado una zona de memoria que no ha sido reservada previamente.
PROBLEMA: ¿Cómo puedo saber dónde está el problema, sin volverme loco?
Tengo punteros, listas, matrices dinámicas,...
Un saludo. Gracias.
He hecho un programa el cual sé que tiene un error de memoria, es decir:
- no he liberado memoria previamente reservada.
ó - he liberado una zona de memoria más de una vez.
ó - he liberado una zona de memoria que no ha sido reservada previamente.
PROBLEMA: ¿Cómo puedo saber dónde está el problema, sin volverme loco?
Tengo punteros, listas, matrices dinámicas,...
Un saludo. Gracias.
Los punteros son algo liado y no suele haber una forma sencilla de encontrar errores.
Si usas C++ aqui http://www.geocities.com/chuidiang/trucoscpp.html#newdelete tienes una pequeña idea de cómo encontrarlo.
En la misma página tienes un link a otra página con varios debuggers/herramientas especializadas en encontrar esas cosas, puedes echar un ojo por ahí.
Se bueno.
Si usas C++ aqui http://www.geocities.com/chuidiang/trucoscpp.html#newdelete tienes una pequeña idea de cómo encontrarlo.
En la misma página tienes un link a otra página con varios debuggers/herramientas especializadas en encontrar esas cosas, puedes echar un ojo por ahí.
Se bueno.
Además de la necesidad de comprender y corregir el origen de los errores, que es lo que supongo que es necesario hacer antes que otra cosa, yo te sugeriría que trates de evitar el uso de punteros, a menos que resulten realmente necesarios. Una eficaz alternativa para las listas "artesanales", son las std::list (de la biblioteca estándar); y en lugar de "matrices dinámicas" puedes usar std::vector u otro contenedor también estándar. La ventaja de éstos es que son muy eficientes (eligiendo el contenedor más apropiado a la solución del problema) y manejan su propia asignación de memoria. Otra alternativa para el uso de punteros son los "smart pointers", por ej. un autoptr.
Suerte,
Alejandro
Suerte,
Alejandro
