• Jueves 14 de Noviembre de 2024, 04:09

Autor Tema:  Stack overflow  (Leído 1431 veces)

antotejas

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Stack overflow
« en: Lunes 25 de Mayo de 2009, 09:59 »
0
Hola a todos,

Estoy realizando un programa en el que necesito leer datos de un fichero de text ,guardarlos en un array(para organizar la informacion) y luego procesarlos.

el problema es que al declarar el array,que lo quiero hacer de tamaño fijo y del tipo elemento:

element list[1000];

Solo me deja declararlo de este tamaño,si lo intento hacer de mas me sale el error de stach overflow:

Unhandled exception at 0x00402a47 in clustering1.exe: 0xC00000FD: Stack overflow.


¿Hay alguna solucion para este problema?

Gracias!!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Stack overflow
« Respuesta #1 en: Lunes 25 de Mayo de 2009, 10:04 »
0
Prueba a hacerlo con malloc(). Así te reservará espacio en el montículo y no en la pila  ;)

Código: C
  1. element list[];
  2. list = malloc(sizeof(element) * 1000);
  3.  
« última modificación: Lunes 25 de Mayo de 2009, 10:47 por m0skit0 »

antotejas

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Stack overflow
« Respuesta #2 en: Lunes 25 de Mayo de 2009, 10:40 »
0
Pero si lo hago como tu dices me toca cambiar todo el programa para ponerlo todo con punteros??

struct element //record for senders
{
      char date[10];//The date of the transfer
      int amountOfMoney;//the amount of money send
      char senderName[500];//the sender name
      char receiverName[500];// the receiver name
};

element list[1000];

Asi es como yo lo tengo,el caso es que necesitaria un array de aproximadamenete 3000 posiciones

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Stack overflow
« Respuesta #3 en: Lunes 25 de Mayo de 2009, 10:46 »
0
no, si solo localizas memoria para el array de elementos.

solo tendrás el puntero del array de elementos y no deberías tener que modificar nada del código, ya que el array es a fin de cuentas un puntero.
El array contendra elementos de tipo element que tendrán internamente arrays estaticos.
Código: C++
  1.  
  2. struct element //record for senders
  3. {
  4. char date[10];//The date of the transfer
  5. int amountOfMoney;//the amount of money send
  6. char senderName[500];//the sender name
  7. char receiverName[500];// the receiver name
  8. };
  9.  
  10. element * list;
  11.  
  12. list=new element[3000]; //o tambien list=(element*)malloc(sizeof(element)*3000);
  13.  
  14.  
  15.  
« última modificación: Lunes 25 de Mayo de 2009, 10:47 por diego.martinez »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Stack overflow
« Respuesta #4 en: Lunes 25 de Mayo de 2009, 10:46 »
0
Eso que tienes es mucho espacio para la pila. Si lo haces como te digo, no tienes que cambiar nada en el código, los vectores son punteros  ^_^

EDITO: por cierto, me equivoqué ligeramente en el código de malloc() que te puse, ya está corregido.
« última modificación: Lunes 25 de Mayo de 2009, 10:48 por m0skit0 »

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Stack overflow
« Respuesta #5 en: Lunes 25 de Mayo de 2009, 10:48 »
0
que sincronización  :beer:

antotejas

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Stack overflow
« Respuesta #6 en: Lunes 25 de Mayo de 2009, 10:58 »
0
Muchas gracias!!

Ya esta hecho!