• Viernes 8 de Noviembre de 2024, 17:46

Autor Tema:  Problemas Con Borrado  (Leído 1039 veces)

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Problemas Con Borrado
« en: Sábado 25 de Noviembre de 2006, 12:06 »
0
Hola a todos

Estoy intentando hacer un contenedor de objetos de una clase (SMRmodulo) en otra clase (SMRentorno). En la clase SMRentorno tengo un atributo SMRmodulo **modulosF;  y un metodo para agregar modulos al vector (AgregarModulo) que tiene la siguiente definicion:

Código: Text
  1.  
  2.  
  3. void SMRentorno::AgregarModulo(SMRmodulo *mod)
  4. {
  5.  
  6. SMRmodulo **aux; //contenedor aux para aumentar la dim y meter el nuevo mod
  7. int numA,num;
  8. if(mod->GetNivel()==SMR_N_MODULO) // si el modulo es del nivel que quiero
  9. {
  10. numA=this->GetNumModF(); // numA=numero de modulos sin añadir mod
  11. num=numA+1; // num= numero de modulos añadiendo mod
  12. aux=new SMRmodulo*[num]; // reserva de memoria en aux
  13. for(int i=0;i<numA;i++)  // recorro el contenedor de la clase SMRentorno
  14. {
  15.   aux[i]=new SMRmodulo(); // reserva de memoria
  16.   aux[i]=(this->modulosF)[i]; //y voy metiendo en aux su contenido
  17. }
  18. aux[numA]=new SMRmodulo(); // reserva de memoria
  19. aux[numA]=mod; // en el elemento [numA] meto el nuevo modulo
  20.  
  21. //*********** AQUI ES DONDE ESTA EL PROBLEMA **********  
  22. for(int i=0;i<numA;i++) //recorro el contenedor de la clase
  23.   delete [] this->modulosF[i]; // y borro los modulos que tiene
  24. delete [] this->modulosF;  // y depues borro la reserva de memoria
  25. //****************************************************
  26.  
  27. this->modulosF=aux; // finalmente hago que el ptro de la clase apunte al ptro aux
  28. this->SetNumModF(num); // actualizo el numero de modulos
  29. }
  30.  
  31. }
  32.  
  33.  
  34.  

El problema es que al intentar meter varios modulos y recorrerlos para ver si se han agregado bien, lo que obtengo es basura.

Si no hago el borrado funciona bien, pero claro voy dejando una copia de todos los modulos en memoria

Si alguien puede echarme una mano le estare agradecido

Salu2

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Problemas Con Borrado
« Respuesta #1 en: Sábado 25 de Noviembre de 2006, 13:17 »
0
Bueno ya di con lo que fallaba (tanto tiempo sin usar los punteros es lo que tiene ... :D )

El fallo esta aqui

aux=(this->modulosF);

estoy copiando los punteros y no el contenido por lo que al borrar this->modulosF aux se queda apuntando a una zona de memoria que no tiene nada

Lo correcto seria:

*aux=*(this->modulosF);

Por cierto, una curiosidad que tengo, hay alguna forma de incrementar el espacio de memoria al que apunta un ptro. Lo digo para no tener que hacer una copia de lo que apuntaba ........

salu2 y gracias