Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error al usar delete con una clase

Estas en el tema de error al usar delete con una clase en el foro de C/C++ en Foros del Web. hola gente!, estoy usando el c++ Builder 2010 y my problema es cuando trato de usar delete para liberar el espacio de memoria que esta ...
  #1 (permalink)  
Antiguo 20/12/2011, 23:16
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
error al usar delete con una clase

hola gente!, estoy usando el c++ Builder 2010 y my problema es cuando trato de usar delete para liberar el espacio de memoria que esta usando el puntero a la clase que cree....lo que estoy haciendo es lo siguiente:

- En el evento FormCreate creo un puntero a mi clase con el comando new

Código C++:
Ver original
  1. Listado= new Lista_Producto;
  2.  
  3. //el puntero Listado ya fue declarado en el archivo .h y Lista_Producto es la clase que cree

- En el evento FormDestroy del mismo formulario utilizo el comando delete en el puntero Listadp

Código C++:
Ver original
  1. delete Listado;

El programa compila, el problema es que me da el error access violation at address xxxxxxx in module 'BORLNDMM.DLL'. write of address xxxxxxx pero no estoy seguro si se libera el espacio de memoria de la variable.

La clase que cree cuenta tambien con un destructor:

Código C++:
Ver original
  1. Lista_Producto::~Lista_Producto(){
  2.  
  3. Producto *Aux= Primero;
  4.  
  5. while (Primero!= NULL){
  6.  
  7. Primero= Primero->Siguiente;
  8. delete Aux;
  9. Aux= Primero;
  10. }
  11. }

este es el caso de una lista enlazada, donde la clase Producto es la pila.

Tambien quisiera saber si al usar el comando delete lo que hace es utilizar el destructor de mi clase.


Saludos y gracias de antemano por las respuestas y la revision del problema
  #2 (permalink)  
Antiguo 21/12/2011, 05:12
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: error al usar delete con una clase

Efectivamente si usas delete llama al destructor de la clase.
Proba sacando el delete Listado, para ver si falla ahi. Sino creo que deberias mostrar toda la implementacion de la pila.
  #3 (permalink)  
Antiguo 21/12/2011, 07:34
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: error al usar delete con una clase

Creo que encontre mi error, por lo menos ahora no me da error al cerrar la ventana.... parece que me habia olvidado de declarar el constructor de la lista, entonces al crearse esta los punteros que se utilizan en el destructor de esta no apuntan a ningun lado, agruegue esto:

Código C++:
Ver original
  1. Lista_Producto(){
  2. this->Primero= NULL;
  3. this->Ultimo= NULL;
  4. };




Cita:
Iniciado por sam90 Ver Mensaje
Efectivamente si usas delete llama al destructor de la clase.
Proba sacando el delete Listado, para ver si falla ahi. Sino creo que deberias mostrar toda la implementacion de la pila.
Si saco el delete Listado; del evento FormDestroy el error no aparecia mas, pero no me quedaban espacios de memoria ocupados por la clase?, ya que esta usa punteros.
  #4 (permalink)  
Antiguo 21/12/2011, 07:45
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: error al usar delete con una clase

SI te quedan, era solo de forma debug para ver si ese era el problema, ya uqe no lo habias asegurado.

Posiblemente sea eso, pero revisa bien tus implementaciones para evitar estos problemas. Testea el codigo con muchos ejemplos inventados por vos para ver si anda del todo bien!
  #5 (permalink)  
Antiguo 21/12/2011, 07:50
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: error al usar delete con una clase

gracias "sam90", recien termino de programar la clase, ahora voy a probar utilizarla, si tengo algun problema que no pueda solucionar aviso.

Saludos y gracias

Etiquetas: c++, clases, delete, destructor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:23.