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

Reserva de memoria?

Estas en el tema de Reserva de memoria? en el foro de C/C++ en Foros del Web. Hola a todos. Estoy enfrascado en una aplicación (utilizo BB6) que accede a un fichero excel y extrae datos de él para procesarlos posteriormente. Más ...
  #1 (permalink)  
Antiguo 14/12/2010, 14:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 13 años, 5 meses
Puntos: 0
Reserva de memoria?

Hola a todos.

Estoy enfrascado en una aplicación (utilizo BB6) que accede a un fichero excel y extrae datos de él para procesarlos posteriormente. Más concretamente, he de procesar dos columnas de más de 10.000 filas. Los datos extraidos y procesados he de alojarlos en memoria para volver procesarlos nuevamente mas adelante. Necesito reservar 8 MB de memoria.

Extraer los datos del excel e ir procesándolos de manera secuencial (uno a uno) no es problema. El problema parece surgir al ir alojando los datos procesados para poder acceder a ellos posteriormente, pues me da un error típico: "Access violation at address..." De hecho, el probelam no se da si empleo un excel de prueba de 100 lineas.

No soy ningún fenómeno en esto, de modo que doy por hecho que he metido la pata con algún puntero y/o la reserva de memoria. Espero sepan iluminarme.

(Por su extensión no puedo pegar el código entero... espero que quede suficientemente explícito...)

Código C++:
Ver original
  1. #include <stdio>
  2. #include <iostream>
  3. ...
  4. ...
  5.  
  6. TForm1 *Form1;
  7.  
  8. // Declaraciones globales
  9. ...
  10. char *MEMORIA[100000]; // Aunque tenga 10000 filas voy a necesitar 100.000 //punteros pues los datos tendré que almacenarlos de acuerdo con una tabla hash.
  11. ...
  12.  
  13. //---------------------------------------------------------------------------
  14. void __fastcall TForm1::FormCreate(TObject *Sender)
  15. {
  16. ...
  17. for (ii=0;ii<=99999;ii++) {
  18.         MEMORIA[ii]=new char[80];  // Cada puntero señala al comienzo de una                       // cadena que, como máximo, ocupará 80 caracteres. En total pretendo reservar
  19. // 8 MB.
  20. }
  21. //---------------------------------------------------------------------------
  22.  
  23. void __fastcall TForm1::Examinar_01Click(TObject *Sender)
  24. {
  25. if( OpenDialog1->Execute() ){
  26. // Acceso al excel.
  27. ...
  28. for (recorre las filas del excel) {
  29. // El contenido de las celdas se almacena como AnsiString FILA.
  30. ...
  31. MEMORIA[ii]=FILA.c_str();
  32. ...
  33. }
  34. //---------------------------------------------------------------------------

Omito lo del delete, pues el código salta antes de poder devolver al SO la memoria reservada.

Cuando ejecuto con un excel de prueba de 100 líneas la cosa funciona... pero cuande le arrojo el gordo de 10000 me salta el error.

En fin... cualquier ayuda será bienvenida.

Gracias a todos.

Etiquetas: memoria
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:46.