Ver Mensaje Individual
  #4 (permalink)  
Antiguo 31/05/2014, 11:24
Avatar de GumiCat
GumiCat
 
Fecha de Ingreso: mayo-2014
Ubicación: Argentina
Mensajes: 16
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Mi cadena se pierde

Modifiqué mi programa para que cuando ya haya memoria asignada, entonces se libere y ponga a "cad" en NULL, pero aún así no me está funcionando.
¿Qué estoy haciendo mal?

Código C++:
Ver original
  1. #include <iostream>
  2. #include <new>
  3. #include <cstring>
  4.  
  5. using std::cout;
  6.  
  7. class cadena
  8. {
  9.     public:
  10.         cadena(const char *);
  11.         ~cadena();     
  12.     private:
  13.         void estableceCadena(const char *);
  14.        
  15.         char * cad;
  16.        
  17. };
  18.  
  19. cadena::cadena(const char *LCad)
  20. {  
  21.     cad = NULL;
  22.    
  23.     cout << "Constructor de: " << LCad << "\n";
  24.     estableceCadena(LCad);
  25. }
  26.  
  27. cadena::~cadena()
  28. {
  29.     cout << "Destructor de " << cad << "\n";
  30.    
  31.     delete [] cad;
  32.     cad = NULL;
  33. }
  34.  
  35. void cadena::estableceCadena(const char *Cad2)
  36. {
  37.     if (cad != NULL) //si ya hay memoria asignada
  38.     {
  39.         delete [] cad; //borramos la cadena
  40.         cad = NULL; // y hacemos que no apunte a nada
  41.     }
  42.    
  43.     cad = new char[strlen(Cad2) + 1]; //reasignamos un espacio de memoria
  44.     strcpy(cad, Cad2);   //copiamos
  45. }
  46.  
  47. int main()
  48. {
  49.     cadena Cad1("Hola");
  50.     Cad1 = "Adios";
  51.    
  52.     return 0;
  53. }

esta es la salida de mi programa

Código texto:
Ver original
  1. Constructor de: Hola
  2. Constructor de: Adios
  3. Destructor de Adios
  4. Destructor de ↑'=
  5.  
  6. << El programa ha finalizado: codigo de salida: 0 >>
  7. << Presione enter para cerrar esta ventana >>