Liberar memoria reservada

Daniel
16 de Junio del 2004
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.

chuidiang
16 de Junio del 2004
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.

Alejandro_
16 de Junio del 2004
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