• Martes 12 de Noviembre de 2024, 21:30

Autor Tema:  STL Lista de objetos: problemas de la memoria  (Leído 918 veces)

juanwalker

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
STL Lista de objetos: problemas de la memoria
« en: Martes 27 de Octubre de 2009, 22:54 »
0
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.  
« última modificación: Miércoles 28 de Octubre de 2009, 15:10 por juanwalker »

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: STL Lista de objetos: problemas de la memoria
« Respuesta #1 en: Miércoles 28 de Octubre de 2009, 09:17 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

juanwalker

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: STL Lista de objetos: problemas de la memoria
« Respuesta #2 en: Miércoles 28 de Octubre de 2009, 14:36 »
0
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!!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: STL Lista de objetos: problemas de la memoria
« Respuesta #3 en: Miércoles 28 de Octubre de 2009, 14:44 »
0
De nadas  :good:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.