• Domingo 22 de Diciembre de 2024, 20:25

Autor Tema:  Porque este error en el Codigo  (Leído 1337 veces)

Jesmi89

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Porque este error en el Codigo
« en: Lunes 18 de Octubre de 2010, 04:00 »
0
Hola a todos, quisiera saber si alguien posria atudarme a saber porq me aparece el siguiente error en este codigo.
  • Too much global data defined in file[/color]

     Gracias les agradeceria mucho

    Código: C++
    1. #include<iostream.h>
    2. #include<stdio.h>
    3. #include<conio.h>
    4. #include<stdlib.h>
    5. #include<time.h>
    6. #include<fstream.h>
    7.  
    8.  
    9. char inscripcion( FILE *abrir);
    10. char consulta( FILE *abrir);
    11. char modificar( FILE *abrir);
    12. char eliminar( FILE *abrir);
    13. void listado( FILE *abrir);
    14. char borrar( FILE *abrir);
    15. char menualumno();
    16.  
    17.  
    18. int tvs = 0;
    19. #define capacidad 300
    20. struct alumnos
    21. {
    22.     char carne[7];
    23.     char nombre[45];
    24.     char carrera[55];
    25.     char direccion[45];
    26.     char semestre[2];
    27.     char seccion[2];
    28.     char correo[20];
    29. }; //fin struct alumnos
    30.  
    31. struct alumnos alu[capacidad];
    32. struct alumnos alu2[capacidad];
    33. struct alumnos alu3[capacidad];
    34. struct alumnos alu4[capacidad]; //declaracion de 4 objetos alumnos
    35.  
    36.  
    37. char main()
    38. {
    39.  bool salir = false;
    40.  while (salir == false)
    41.  {
    42.  int opcion; int opconsulta=1;
    43.  FILE *abrir;
    44.  
    45.   clrscr();
    46.   cout<<"ttttBIENVENIDOnn"<<endl;
    47.   cout<<"tttt OPCIONES ALUMNOSnnnn"<<endl;
    48.   cout<<"ttt1) INSCRIPCIONn "<<endl;
    49.   cout<<"ttt2) CONSULTASn"<<endl;
    50.   cout<<"ttt3) MODIFICARn"<<endl;
    51.   cout<<"ttt4) ELIMINARn"<<endl;
    52.   cout<<"ttt50) ELIMINAR BASE DE DATOSn"<<endl;
    53.   cout<<"ttt5) SALIRn"<<endl;
    54.  cin>> opcion;
    55.  
    56.  switch(opcion)
    57.     {
    58.  case 1:
    59.             inscripcion(abrir);
    60.                  break;
    61.  case 2: {
    62.              cout<<endl<<endl<<endl<<"1     ver alumnos individuales"<<endl;
    63.             cout<<"2     ver listado de todos los alumnos"<<endl<<endl;
    64.          cin>>opconsulta;
    65.             switch (opconsulta)
    66.          {
    67.                 case 1: consulta(abrir);
    68.                      break;
    69.                 case 2: listado(abrir);
    70.                 break;
    71.                 default: cout<<"opcion incorrecta";
    72.          } //fin switch
    73.             }//fin case 2
    74.          break;
    75.  case 3: modificar(abrir);
    76.                  break;
    77.  case 4: eliminar(abrir);
    78.                  break;
    79.  case 5: salir = true;
    80.                  break;
    81.  case 50: borrar(abrir);
    82.                  break;
    83.  
    84.  
    85.  default: cout<<"OPCION NO VALIDA"<<endl;
    86.  } //fin del while
    87. }//fin primer switch
    88. }//fin main
    89.  
    90. char borrar(FILE *abrir)
    91. {
    92.     remove("alumnos.txt");
    93.     remove("contador.txt");
    94. }
    95.  
    96. char inscripcion(FILE *abrir)
    97. {
    98.         char numero[7];
    99.  
    100.        ifstream abr;
    101.        abr.open("contador.txt",ios::in);
    102.          abr>>tvs;
    103.        abr.close();
    104.       tvs++;
    105.         itoa(tvs,numero,10);
    106.  
    107.       fseek(abrir, 0L, SEEK_END);
    108.  
    109.       abrir=fopen("alumnos.txt","a+");
    110.          cout<<"ttINSCRIPCIONn"<<endl;
    111.         cout<<"CARNE No: "<<tvs<<endl;
    112.       cout<<"INGRESE LO SIGUIENTE"<<endl;
    113.       strcpy(alu[tvs].carne, numero);  fflush(stdin);
    114.         cout<<" NOMBRE"<<endl;
    115.       gets(alu[tvs].nombre);  fflush(stdin);
    116.       cout<<" DIRECCION"<<endl;
    117.         gets(alu[tvs].direccion); fflush(stdin);
    118.       cout<<" CORREO"<<endl;
    119.       gets(alu[tvs].correo); fflush(stdin);
    120.         cout<<"CARRERA"<<endl;
    121.       gets(alu[tvs].carrera);fflush(stdin);
    122.       cout<<"SEMESTRE"<<endl;
    123.         gets(alu[tvs].semestre);fflush(stdin);
    124.       cout<<" SECCION"<<endl;
    125.       gets(alu[tvs].seccion); fflush(stdin);
    126.  
    127.  
    128.     fwrite(&alu[tvs],sizeof(struct alumnos),1,abrir);
    129.      fseek(abrir, 0L, SEEK_SET);
    130.     fclose(abrir);
    131.  
    132.      ofstream ab;
    133.        ab.open("contador.txt",ios::trunc);
    134.        ab<<tvs;
    135.          ab.close();
    136.  
    137. }
    138. char consulta( FILE *abrir)
    139. {
    140.   int num;
    141.          ifstream abr;
    142.        abr.open("contador.txt",ios::in);
    143.        abr>>tvs;
    144.          abr.close();
    145.  
    146.    cout<<"INGRESE EL No. DE CARNE"<<endl;
    147.     cin>>num;
    148.     abrir = fopen("alumnos.txt", "r");
    149.  
    150.     if(abrir == NULL)
    151.     {
    152.         cout<<"nALUMNOS NO EXISTE! nPOR FAVOR CREELO"<<endl;
    153.  
    154.     }
    155.    else
    156.     {
    157.       num--;
    158.       fread(&alu2, sizeof(alumnos),tvs, abrir);
    159.         cout<<"CARNE: "<<alu2[num].carne<<endl;
    160.       cout<<"NOMBRES: "<<alu2[num].nombre<<endl;
    161.         cout<<"CARRERA: "<<alu2[num].carrera<<endl;
    162.         cout<<"DIRECCION: "<<alu2[num].direccion<<endl;
    163.        cout<<"SEMESTRE: "<<alu2[num].semestre<<endl;
    164.       cout<<"SECCION: "<<alu2[num].seccion<<endl;
    165.         cout<<"CORREO: "<<alu2[num].correo<<endl<<endl<<endl;
    166.    }
    167.  
    168.     fclose(abrir);
    169.  
    170.  
    171.   getch();
    172. }
    173.  
    174. char modificar( FILE *abrir)
    175. {
    176.     int num;
    177.     abrir = fopen("alumnos.txt", "r+");
    178.    ifstream abr;
    179.    abr.open("contador.txt",ios::in);
    180.     abr>>tvs;
    181.    abr.close();
    182.  
    183.     fread(&alu3, sizeof(alumnos),tvs, abrir);
    184.    fclose(abrir);
    185.  
    186.     //listado(abrir);
    187.  
    188.    cout<<"INGRESE EL No. DE CARNE"<<endl;
    189.     cin>>num;
    190.  
    191.     if(abrir == NULL)
    192.     {
    193.         cout<<"nALUMNOS NO EXISTE! nPOR FAVOR CREELO"<<endl;
    194.    }
    195.  
    196.    if (num > tvs)
    197.    { cout<<endl<<"alumno no registrado"<<endl; getche();}
    198.  
    199.    else
    200.    {
    201.         num--;
    202.         cout<<" NOMBRE"<<endl;
    203.       gets(alu3[num].nombre);
    204.         cout<<" DIRECCION"<<endl;
    205.       gets(alu3[num].direccion);
    206.       cout<<" CORREO"<<endl;
    207.         gets(alu3[num].correo);
    208.       cout<<"CARRERA"<<endl;
    209.       gets(alu3[num].carrera);
    210.         cout<<"SEMESTRE"<<endl;
    211.       gets(alu3[num].semestre);
    212.       cout<<" SECCION"<<endl;
    213.         gets(alu3[num].seccion);
    214.       cout<<"n";
    215.       abrir = fopen("alumnos.txt", "w+");
    216.         fwrite(&alu3,sizeof(struct alumnos),tvs,abrir);
    217.       fseek(abrir, 0L, SEEK_END);
    218.       fclose(abrir);
    219.         }
    220.  
    221.       fclose(abrir);
    222. }
    223.  
    224. char eliminar( FILE *abrir)
    225. {
    226.         char decision = 'n';
    227.       int num;
    228.         abrir = fopen("alumnos.txt", "r+");
    229.        ifstream abr;
    230.        abr.open("contador.txt",ios::in);
    231.         abr>>tvs;
    232.        abr.close();
    233.  
    234.     fread(&alu4, sizeof(alumnos),tvs, abrir);
    235.    fclose(abrir);
    236.  
    237.     cout<<"ttELIMINARn"<<endl;
    238.     cout<<"INGRESE EL No. DE CARNE"<<endl;
    239.    cin>>num;
    240.  
    241.    if (num>tvs)
    242.    {
    243.         cout<<"El registro que desea eliminar NO existe";
    244.    } // fin del if
    245.    else
    246.      {
    247.         num--;
    248.       cout<<"CARNE: "<<alu4[num].carne<<endl;
    249.         cout<<"NOMBRES: "<<alu4[num].nombre<<endl;
    250.         cout<<"CARRERA: "<<alu4[num].carrera<<endl;
    251.       cout<<"DIRECCION: "<<alu4[num].direccion<<endl;
    252.         cout<<"SEMESTRE: "<<alu4[num].semestre<<endl;
    253.       cout<<"SECCION: "<<alu4[num].seccion<<endl;
    254.       cout<<"CORREO: "<<alu4[num].correo<<endl<<endl<<endl;
    255.         cout<<endl<<endl<<"Desea eliminar este alumno? S/N"<<endl;
    256.       cin>>decision;
    257.  
    258.         switch (decision)
    259.       {
    260.       case 'n': return 'n';
    261.                     break;
    262.       case 's':
    263.           {
    264.  
    265.          strcpy(alu4[num].nombre, "ELIMINADO");
    266.            strcpy(alu4[num].direccion, "ELIMINADO");
    267.             strcpy(alu4[num].correo, "ELIMINADO");
    268.          strcpy(alu4[num].carrera, "ELIMINADO");
    269.            strcpy(alu4[num].semestre, "0");
    270.             strcpy(alu4[num].seccion, "0");
    271.  
    272.             abrir = fopen("alumnos.txt", "w+");
    273.             fwrite(&alu4,sizeof(struct alumnos),tvs,abrir);
    274.           fseek(abrir, 0L, SEEK_END);
    275.           fclose(abrir);
    276.             cout<<"EL CARNE No: "<<(num+1)<<" HA SIDO ELIMINADO"<<endl;
    277.             } //fin del case
    278.       }// fin del switch
    279.       getche();
    280.    } //fin del else
    281. }
    282.  
    283. void listado(FILE *abrir)
    284. {
    285.     abrir = fopen("alumnos.txt", "r+");
    286.    ifstream abr;
    287.    abr.open("contador.txt",ios::in);
    288.     abr>>tvs;
    289.    abr.close();
    290.  
    291.     fread(&alu3, sizeof(alumnos),tvs, abrir);
    292.    fclose(abrir);
    293.  
    294.     for (int i= 0; i<tvs; i++)
    295.    {
    296.       cout<<"CARNE: "<<alu3[i].carne<<endl;
    297.         cout<<"NOMBRES: "<<alu3[i].nombre<<endl;
    298.         cout<<"CARRERA: "<<alu3[i].carrera<<endl;
    299.       cout<<"DIRECCION: "<<alu3[i].direccion<<endl;
    300.         cout<<"SEMESTRE: "<<alu3[i].semestre<<endl;
    301.         cout<<"SECCION: "<<alu3[i].seccion<<endl;
    302.         cout<<"CORREO: "<<alu3[i].correo<<endl<<endl<<endl;
    303.     }
    304.     getche();
    305. }
    306.  
    307.  

     :good:

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Porque este error en el Codigo
« Respuesta #1 en: Lunes 18 de Octubre de 2010, 19:05 »
0
Cita de: "Jesmi89"
Hola a todos, quisiera saber si alguien posria atudarme a saber porq me aparece el siguiente error en este codigo.
  • Too much global data defined in file[/color]

El problema es que estas sobrepasando el tamaño maximo que puedes utilizar para variables globales, que si no mal recuerdo es de 2 elevado a la 16, o sea, 65536 bytes.

Solamente haz cuentas:

El tamaño (en bytes) de tu estructura alumnos es 7+45+55+45+2+2+20=176
Luego defines 4 arreglos de 300 alumnos, por lo tanto, la cantidad de memoria utilizada es 4 * 300 * 176 = 211200, y como dje antes, el maximo es 65536.

Una solucion podria ser que utilices memoria dinamica (new o malloc), en lugar de memoria estatica, para definir tus arreglos, ya que la memoria dinamica no tiene ese limite, solo esta limitada por la cantidad de memoria que tengas instalada en tu maquina, pero aun asi me parece que es exagerado que quieras los 300 * 4 registros de alumnos en la memoria.

La solucion, mas correcta a mi a parecer, es que solo leas una parte del archivo, de 1 a 20 registros a la vez, quizas un poco mas, pero no los 300, y que implementes un algoritmo que te permita tener acceso a tus 300 registros sin tener que subirlos todos a la memoria a la vez, (pista, busca informacion sobre hash y busqueda en archivos) que es demasiado ineficiente.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================