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

Desbordamiento en una clase [realloc]

Estas en el tema de Desbordamiento en una clase [realloc] en el foro de C/C++ en Foros del Web. Bueno, estoy teniendo un problema con una clase, se llama "Servicios" Dentro de otra clase llamada empresa cuando la quiero editar, agregarle parametros, se desborda. ...
  #1 (permalink)  
Antiguo 18/08/2012, 18:11
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 8
Desbordamiento en una clase [realloc]

Bueno, estoy teniendo un problema con una clase, se llama "Servicios"
Dentro de otra clase llamada empresa cuando la quiero editar, agregarle parametros, se desborda.
Pero si la creo afuera de la clase no pasa lo mismo, funciona correctamente.


clases.cpp
Código C++:
Ver original
  1. /*La clase Factura no la agrego por que no es la causante del problema*/
  2. class Compania
  3. {
  4.     private:
  5.         char* nombre;
  6.     public:
  7.         char* getName(){ return nombre; }
  8.         void setName(char* n){ nombre = n; return; }
  9. };
  10. class Servicio
  11. {
  12.     private:
  13.         char* nombre;
  14.         int m_max;
  15.         Compania *comp;
  16.     public:
  17.         Servicio();
  18.         char* getName(){ return nombre; }
  19.         void setName(char* p){ nombre = p; return; }
  20.         void Agregar(Compania);
  21. };
  22. Servicio::Servicio()
  23. {
  24.     m_max = 0;
  25.     comp = (Compania*)calloc(1, sizeof(Compania));
  26. }
  27. void Servicio::Agregar(Compania Cp)
  28. {
  29.     m_max++;
  30.     comp = (Compania*)realloc(comp, sizeof(Compania)*(m_max+1));  /* EL desbordamiento
  31.  se genera aquí dentro de la clase empresa*/
  32.     comp[m_max] = Cp;
  33.     return;
  34. }
  35. class Empresa
  36. {
  37.     private:
  38.         int f_max;
  39.         int c_max;
  40.         int s_max;
  41.     public:
  42.         Factura *facturas;
  43.         Compania *companias;
  44.         Servicio *servicios;
  45.         Empresa();
  46.         void AgregarFactura(char*, float);
  47.         void AgregarServicio(char*);
  48.         void AgregarEmpresa(char*);
  49. };
  50.  
  51. void Empresa::AgregarFactura(char* ser, float mont)
  52. {
  53.     f_max++;
  54.     facturas = (Factura*)realloc(facturas, sizeof(Factura)*(f_max+1));
  55.     facturas[f_max].setMonto(mont);
  56.     facturas[f_max].setNombre(ser);
  57. }
  58. void Empresa::AgregarServicio(char* ser)
  59. {
  60.     s_max++;
  61.     servicios = (Servicio*)realloc(servicios, sizeof(Servicio)*(s_max+1));
  62.     servicios[s_max].setName(ser);
  63.     return;
  64. }
  65. void Empresa::AgregarEmpresa(char* emp)
  66. {
  67.     c_max++;
  68.     companias = (Compania*)realloc(companias, sizeof(Compania)*(c_max+1));
  69.     companias[c_max].setName(emp);
  70.     return;
  71. }
  72. Empresa::Empresa()
  73. {
  74.     f_max = 0;
  75.     c_max = 0;
  76.     s_max = 0;
  77.     facturas = (Factura*)calloc(1, sizeof(Factura));
  78.     companias = (Compania*)calloc(1, sizeof(Compania));
  79.     servicios = (Servicio*)calloc(1, sizeof(Servicio));
  80. }

main.cpp
Código C++:
Ver original
  1. ....
  2.     Empresa em;
  3.     em.AgregarServicio(ConstToCad("Luz"));
  4.     em.AgregarServicio(ConstToCad("Internet"));
  5.     em.AgregarServicio(ConstToCad("Gas"));
  6.  
  7.     em.AgregarEmpresa(ConstToCad("Edesur"));
  8.     em.AgregarEmpresa(ConstToCad("Metrogas"));
  9.     Compania p;
  10.     p.setName(ConstToCad("Edenor"));
  11.     em.servicios[1].Agregar(em.companias[1]); //Desbordamiento aquí
  12.     em.servicios[1].Agregar(p); //Desbordamiento aquí
  13.     Servicio f;
  14.     f.Agregar(em.companias[1]); //Esto funciona bien
  15.     f.Agregar(p); //Esto funciona bien
  16.         ...

Por lo lo que veo el desbordamiento se genera en la clase empresa, pero no se por que, solamente tengo hipótesis.

Gracias por su atención.
  #2 (permalink)  
Antiguo 19/08/2012, 10:54
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Desbordamiento en una clase [realloc]

Para crear instancias de clases usa new...
Esto asi:
comp = (Compania*)calloc(1, sizeof(Compania));

Quedaria asi:

comp = new Compania;

Etiquetas: calloc, clases, desbordamiento, realloc
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 12:30.