SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: antotejas en Lunes 25 de Mayo de 2009, 09:59

Título: Stack overflow
Publicado por: antotejas en Lunes 25 de Mayo de 2009, 09:59
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!!
Título: Re: Stack overflow
Publicado por: m0skit0 en Lunes 25 de Mayo de 2009, 10:04
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.  
Título: Re: Stack overflow
Publicado por: antotejas en Lunes 25 de Mayo de 2009, 10:40
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
Título: Re: Stack overflow
Publicado por: diego.martinez en Lunes 25 de Mayo de 2009, 10:46
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.  
Título: Re: Stack overflow
Publicado por: m0skit0 en Lunes 25 de Mayo de 2009, 10:46
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.
Título: Re: Stack overflow
Publicado por: diego.martinez en Lunes 25 de Mayo de 2009, 10:48
que sincronización  :beer:
Título: Re: Stack overflow
Publicado por: antotejas en Lunes 25 de Mayo de 2009, 10:58
Muchas gracias!!

Ya esta hecho!