Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Stack Overflow

Iniciado por Abc7, 03 de Octubre de 2004, 03:40:20 AM

« anterior - próximo »

Abc7

 olas.. todo bien?
programando estaba felizmente cuando al crear un array int var[322] me encontre con un error de windows.... "oh my god" dije (bueno.. no exactamente :P) y corri el debugger... lo q me temia: stack overflow.
ya me habia pasado antes.. y por suerte alguien en el canal de c++ de irc-hispano me ayudo a arreglarlo (creo q fue ethernet), porq era un error mio en los arrays.. q hize asi:
int array[10];
array[10] = 78;
printf("%d",array[10]);

esto funciona bien.. pero esta mal!! y al no chekear los array bounds... en cierto momento no me dejo crear mas variables.. y bueno.. stack overflow..
recordando eso, revise todo el codigo... pero los arrays estaban todos bien... en internet lo unico q lei q recomendaron era aumentar el stack.. pero no creo q sea eso.. si no estoy usando muchas variables.. hago int var[85] y anda bien, hago int var[86] y me dice q el programa se cerro, pero sin tirar error, hago int var[87] y ahi si me tira error...
en fin.. abri este thread para q me digan en q fijarme... porq la verdad es q ni sikiera se ejecuta el main.. osea:
int main()
{
   cout << "ola" << endl;
}

me tira error antes de q salga "ola" en la consola :(
el codigo por si alguien lo kiere ver es este: http://keng.sourceforge.net/Keng.rar
por sierto... el engine es open source, usa SDL (2D mode on, 3D mode coming soon :D), bueno uso c++.. y.... nada eso.. bueno chau

ALRAZ

 Una vez me pasó algo parecido, aunque no recuerdo si el caso era el mismo.

Tenía varios arreglos muy grandes, algunos de enteros, otros de estructuras...
llegó un momento enque la cosa ya no servía >_<
aunque no recuerdo si no compilaba o no se ejecutaba...


como sea, la solución que me dió un maestro fue:
crear los arreglos con memoria dinámica

y problema resuelto  (ole)

Intenta hacer eso, tal vez funcione  :P  

vicho

 yo lo que creo es que es cosa de saber que en C, cuando declaras
int var[10];

el arreglo va del 0 al 9

Sacrifai

Cita de: "vicho"yo lo que creo es que es cosa de saber que en C, cuando declaras
int var[10];

el arreglo va del 0 al 9
Cierto, y si no veo mal en el código, estás intentado asignar el valor 78 al array[10], que no se ha creado. Hazlo con array[9] haber si es eso.

Abc7

 no claro.. eso puse q me paso antes.. pero ya lo habia arreglado..
osea, q porq me paso eso, ahora revise cada uno d los arrays a ver si se asignaban correctamente.. pero el error no esta ahi, y solo se revisar arrays para arreglar ese error :S
por eso puse esto funciona bien.. pero esta mal!!

eso d la memoria dinamica lo voy a probar, gracias por el dato

gracias por responder, saludos

synchrnzr

 Las variables estáticas de un programa se guardan (normalmente) en la pila. Si el espacio que necesitas para ellas es muy grande, puedes acabar con un desbordamiento de pila como el que comentas. Cuando tengas que crear arrays grandes, deberías hacerlo dinámicamente, de forma que el array se cree en el heap. Por ejemplo, en tu caso tendrías que hacer algo así como:

int *var;

// ... y luego, dentro del código:

var = ( int * ) malloc( 322 * sizeof( int ) );


sync

Abc7

 ah.. muchas graciasss.... ahora una ultima duda.. el heap entonces tiene mas capacidad q el stack???
saludos

ALRAZ

Cita de: "synchrnzr"Las variables estáticas de un programa se guardan (normalmente) en la pila. Si el espacio que necesitas para ellas es muy grande, puedes acabar con un desbordamiento de pila como el que comentas. Cuando tengas que crear arrays grandes, deberías hacerlo dinámicamente, de forma que el array se cree en el heap.
Eso quise decir  :rolleyes: con lo de los arreglos dinámicos  :P  

Warchief

 No se supone que las zonas de "heap" y "pila" crecen en direcciones opuestas (misma dirección, opuesto sentido ;)) ?; luego si se agota una, es que ha llegado a la otra, y por tanto tampoco cabe más para esa zona. O es que la pila en sí misma tiene un límite añadido? (O es que la colocación de heap y pila es dependiente de S.O.?)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.