SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: juanwalker en Martes 27 de Octubre de 2009, 22:54

Título: STL Lista de objetos: problemas de la memoria
Publicado por: juanwalker en Martes 27 de Octubre de 2009, 22:54
Hola comunidad solo código, estoy tratando de hacer correr un programa muy sencillo utilizando una lista STL para guardar un arreglo de objetos. Resulta que estoy guardando bien los valores con push_back, el problema lo tengo cuando accedo a los datos y me encuentro que no se guardan bien. Agradecería mucho si alguien sabe que puede estar pasando aquí.

Mi entorno es Dev-C++ 4.9 si sirve saber de algo

El código no tiene errores de sintáxis , solo copiar y pegar


-----------------------------8<-------------------------------------

#include <windows.h>
#include <stdio.h>

#include <conio.h>
#include <math.h>
#include <list>

#define cantidad 15

using namespace std;

class Persona
{

   public:
   long  id;
   float* codigos;
   
     Persona(long id,float codigos[])
      {
         this->id=id;
         this->codigos=codigos;   
      
      }      
      
};

class Codigos
{



   public:
   
     Codigos()
   {
          list<Persona> personas;
                                                     
      this->cargaNumero(personas);
      
        Persona p1 = personas.front();
        for (int i=0; i< cantidad ;i++)
            printf("n Persona codigo[%d] = %f",i,p1.codigos);          
        printf("nn");
                

   }
   
   private:   

   
   
   void cargaNumero(list<Persona>& personas)
   {
      float codigos[cantidad];
      long id;
      
   

         for(int i=0; i <cantidad  ;i++)   
         {
            codigos=i/3+pow(i,2);
            
            }  
           
            Persona p1(id,codigos) ;   
         personas.push_back(p1);
         
            Persona p2   = personas.front();
            for (int i=0; i< cantidad;i++)
            {
                printf("n Persona codigo[%d] = %f",i,p2.codigos);        
            }    
            printf("nn");    
               
   
   
   }
   
};
int  main(int argc, char *argv[])
{
    Codigos* codigos = new Codigos();
    getch();
}

-----------------------------8<-------------------------------------
Código: C++
  1.  
Título: Re: STL Lista de objetos: problemas de la memoria
Publicado por: Eternal Idol en Miércoles 28 de Octubre de 2009, 09:17
Lo que pasa es que codigos (fijate que complejo haces el programa poniendole a tantas cosas el mismo nombre o parecido),  la variable local del metodo cargaNumero, desaparece de la pila en cuanto termina el metodo y por lo tanto estas apuntando a memoria que ya no corresponde a los numeros que le introdujiste en su momento, por eso sale cualquier cosa. Si pones esa variable en la parte privada de la clase te funciona bien por ejemplo.

PD. id esta siendo usado sin inicializar.
Título: Re: STL Lista de objetos: problemas de la memoria
Publicado por: juanwalker en Miércoles 28 de Octubre de 2009, 14:36
Hola, muchas gracias por tu respuesta. Ya hice la correción y ahora funciona! lo que he hecho es copiar cada elemento del codigo utilizando un for!

Agradezco mucho que me hallas podido ayudar!! Muy buen día y éxitos!!
Título: Re: STL Lista de objetos: problemas de la memoria
Publicado por: Eternal Idol en Miércoles 28 de Octubre de 2009, 14:44
De nadas  :good: