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

Leyendo de files, con dos instancias

Estas en el tema de Leyendo de files, con dos instancias en el foro de C/C++ en Foros del Web. Hola, queria ver si me podía ayudar a solucionar lo siguiente: Les cuento, tengo una clase con templates y dos instancias iguales (los tipos son ...
  #1 (permalink)  
Antiguo 10/03/2012, 09:31
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 3 meses
Puntos: 11
Exclamación Leyendo de files, con dos instancias

Hola, queria ver si me podía ayudar a solucionar lo siguiente:

Les cuento, tengo una clase con templates y dos instancias iguales (los tipos son iguales); mi programa leer de dos archivos (bueno, eso es lo que quiero) pero cuando intento que la segunda instancia tenga los valores que hay en cierto archivo (texto plano) me aparece un error monumental.

Puedo trabajar sin problemas con una sola instancia, pero si intento leer de otro archivo con otra instancia me aparece el error. Les dejo los códigos importantes a ver si me ayudan.

Código de la clase:
Código C++:
Ver original
  1. template <typename ElementoPTR, typename Elemento>
  2. class Arreglo
  3. {
  4.  public:
  5.      Arreglo();
  6.      //~Arreglo();
  7.      void Lectura(ifstream &);
  8.      void Impresion(ofstream &);
  9.      void MayorPromedio(ofstream &);
  10.      void Ordenar();
  11.      bool Search(string nombre);
  12.      void getter(Elemento Lista[], int& cantidad);
  13.      void setter(Elemento Lista[], int& cantidad);
  14.      void getterCantidad(int &);
  15.      void setCantidad(int i, int j);
  16.      void GetterLista(ElementoPTR ListaAux);
  17.      void SetterLista(ElementoPTR ListaAux, ElementoPTR ListaAux2, int size1, int size2);
  18.      //float Promedio(string nombre);
  19.  private:
  20.      ElementoPTR Nomina;
  21.      int Cantidad;
  22. };

Código para hacer lectura:
Código C++:
Ver original
  1. template <typename ElementoPTR,typename Elemento>
  2. void Arreglo<ElementoPTR,Elemento>::Lectura (ifstream &Entrada){
  3.  
  4.   int indice(0);
  5.     string LastName, FirstName;
  6.     Entrada >> Cantidad;
  7.     Nomina = new Elemento[Cantidad];
  8.     Entrada >> LastName >> FirstName;
  9.     while(!Entrada.eof()){
  10.         Nomina[indice].FullName = LastName + ' ' + FirstName;
  11.         Entrada >> Nomina[indice].LIMITEQUIZES;
  12.         Nomina[indice].Quizes = new float[Nomina[Cantidad].LIMITEQUIZES];
  13.         for(int j=0; j < Nomina[indice].LIMITEQUIZES; j++)
  14.           Entrada >> Nomina[indice].Quizes[j];
  15.         indice++;
  16.         Entrada >> LastName >> FirstName;
  17.     }
  18. }

Código que se ejecutar (es llamado por otro file que sí tiene main() ):
Código C++:
Ver original
  1. struct Element
  2. {
  3.   string FullName;
  4.   int LIMITEQUIZES;
  5.   FloatPTR Quizes;
  6. };
  7. typedef Element Elemento;
  8.  
  9. typedef Elemento* ElementoPTR;
  10.  
  11. void Menu()
  12. {
  13.  
  14. Arreglo<ElementoPTR, Elemento> comp3110;
  15.     Arreglo<ElementoPTR, Elemento> curso;
  16.     ifstream Entrada, file;
  17.     ofstream Salida, Salida1;
  18.     Entrada.open("Asign1.ent");
  19.     file.open("Asign2.ent");
  20.     assert(!file.fail());
  21.     Salida.open ("Asign1.sal");
  22.     Salida1.open ("Asign1a.sal");
  23.    
  24.    
  25.     comp3110.Lectura(Entrada);
  26.     curso.Lectura(file);
  27.                
  28. }

El error que obtengo es el siguiente:
Código Error:
Ver original
  1. *** glibc detected *** ./a.out: free(): invalid next size (fast): 0x088d0758 ***
  2. ======= Backtrace: =========
  3. /lib/libc.so.6[0x9836c5]
  4. /lib/libc.so.6(cfree+0x59)[0x983b09]
  5. /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x2ffe5c1]
  6. /usr/lib/libstdc++.so.6(_ZNSs4_Rep10_M_destroyERKSaIcE+0x1d)[0x2fdb18d]
  7. /usr/lib/libstdc++.so.6(_ZNSsD1Ev+0x57)[0x2fddd37]
  8. ./a.out[0x8049111]
  9. ./a.out(__gxx_personality_v0+0x2f3)[0x8048d4b]
  10. ./a.out(__gxx_personality_v0+0x3e6)[0x8048e3e]
  11. /lib/libc.so.6(__libc_start_main+0xdc)[0x92fe9c]
  12. ./a.out(__gxx_personality_v0+0x79)[0x8048ad1]
  13. ======= Memory map: ========
  14. 006a0000-006a1000 r-xp 006a0000 00:00 0          [vdso]
  15. 007b8000-007c3000 r-xp 00000000 08:01 23265361   /lib/libgcc_s-4.1.2-20080825.so.1
  16. 007c3000-007c4000 rwxp 0000a000 08:01 23265361   /lib/libgcc_s-4.1.2-20080825.so.1
  17. 008fb000-00916000 r-xp 00000000 08:01 23265294   /lib/ld-2.5.so
  18. 00916000-00917000 r-xp 0001a000 08:01 23265294   /lib/ld-2.5.so
  19. 00917000-00918000 rwxp 0001b000 08:01 23265294   /lib/ld-2.5.so
  20. 0091a000-00a6d000 r-xp 00000000 08:01 23265297   /lib/libc-2.5.so
  21. 00a6d000-00a6f000 r-xp 00153000 08:01 23265297   /lib/libc-2.5.so
  22. 00a6f000-00a70000 rwxp 00155000 08:01 23265297   /lib/libc-2.5.so
  23. 00a70000-00a73000 rwxp 00a70000 00:00 0
  24. 00a7c000-00aa3000 r-xp 00000000 08:01 23265319   /lib/libm-2.5.so
  25. 00aa3000-00aa4000 r-xp 00026000 08:01 23265319   /lib/libm-2.5.so
  26. 00aa4000-00aa5000 rwxp 00027000 08:01 23265319   /lib/libm-2.5.so
  27. 02f4b000-0302b000 r-xp 00000000 08:01 10136184   /usr/lib/libstdc++.so.6.0.8
  28. 0302b000-0302f000 r-xp 000df000 08:01 10136184   /usr/lib/libstdc++.so.6.0.8
  29. 0302f000-03030000 rwxp 000e3000 08:01 10136184   /usr/lib/libstdc++.so.6.0.8
  30. 03030000-03036000 rwxp 03030000 00:00 0
  31. 08048000-0804a000 r-xp 00000000 08:11 6751264    /home/math/harol_ps/Desktop/TODASASIG4/Asignacion4B/a.out
  32. 0804a000-0804b000 rw-p 00001000 08:11 6751264    /home/math/harol_ps/Desktop/TODASASIG4/Asignacion4B/a.out
  33. 088c8000-088e9000 rw-p 088c8000 00:00 0          [heap]
  34. b7f3a000-b7f3c000 rw-p b7f3a000 00:00 0
  35. bf872000-bf887000 rw-p bffe9000 00:00 0          [stack]
  36. Aborted


Realmente espero que me puedan ayudar.
__________________
Ríete con un motón de videos chistosos o con las mejores imagenes chistosas

Etiquetas: files, instancias, int, leyendo, programa, string, struct
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 17:55.